From c93b02d55eba70ce8cdd839d6f7d28bd27d2dcf2 Mon Sep 17 00:00:00 2001 From: fabioberger Date: Thu, 7 Nov 2019 19:33:12 +0000 Subject: [PATCH] Update DevUtils artifacts in contract-artifacts --- packages/contract-artifacts/CHANGELOG.json | 2 +- .../artifacts/DevUtils.json | 74 ++++++++++++++++++- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/packages/contract-artifacts/CHANGELOG.json b/packages/contract-artifacts/CHANGELOG.json index 9002ea48b0..84dfe85084 100644 --- a/packages/contract-artifacts/CHANGELOG.json +++ b/packages/contract-artifacts/CHANGELOG.json @@ -3,7 +3,7 @@ "version": "2.3.0-beta.2", "changes": [ { - "note": "Dependencies updated" + "note": "Update DevUtils contract artifacts" } ] }, diff --git a/packages/contract-artifacts/artifacts/DevUtils.json b/packages/contract-artifacts/artifacts/DevUtils.json index 72f9585942..3a95c3b624 100644 --- a/packages/contract-artifacts/artifacts/DevUtils.json +++ b/packages/contract-artifacts/artifacts/DevUtils.json @@ -38,6 +38,15 @@ "stateMutability": "pure", "type": "function" }, + { + "constant": true, + "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "name": "decodeAssetProxyId", + "outputs": [{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, { "constant": true, "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], @@ -249,6 +258,20 @@ "stateMutability": "pure", "type": "function" }, + { + "constant": true, + "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "name": "decodeStaticCallAssetData", + "outputs": [ + { "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }, + { "internalType": "address", "name": "staticCallTargetAddress", "type": "address" }, + { "internalType": "bytes", "name": "staticCallData", "type": "bytes" }, + { "internalType": "bytes32", "name": "expectedReturnDataHash", "type": "bytes32" } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, { "constant": true, "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], @@ -358,6 +381,19 @@ "stateMutability": "pure", "type": "function" }, + { + "constant": true, + "inputs": [ + { "internalType": "address", "name": "staticCallTargetAddress", "type": "address" }, + { "internalType": "bytes", "name": "staticCallData", "type": "bytes" }, + { "internalType": "bytes32", "name": "expectedReturnDataHash", "type": "bytes32" } + ], + "name": "encodeStaticCallAssetData", + "outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, { "constant": true, "inputs": [ @@ -624,6 +660,15 @@ "payable": false, "stateMutability": "view", "type": "function" + }, + { + "constant": true, + "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "name": "revertIfInvalidAssetData", + "outputs": [], + "payable": false, + "stateMutability": "pure", + "type": "function" } ], "devdoc": { @@ -638,6 +683,13 @@ "params": { "encoded": "ABI-encoded revert error." }, "return": "assetProxyId Id of asset proxy.assetProxyAddress The address of the asset proxy." }, + "decodeAssetProxyId(bytes)": { + "details": "Decode AssetProxy identifier ", + "params": { + "assetData": "AssetProxy-compliant asset data describing an ERC-20, ERC-721, ERC1155, or MultiAsset asset." + }, + "return": "The AssetProxy identifier" + }, "decodeAssetProxyTransferError(bytes)": { "details": "Decompose an ABI-encoded AssetProxyTransferError.", "params": { "encoded": "ABI-encoded revert error." }, @@ -656,7 +708,7 @@ "decodeERC20AssetData(bytes)": { "details": "Decode ERC-20 asset data from the format described in the AssetProxy contract specification.", "params": { "assetData": "AssetProxy-compliant asset data describing an ERC-20 asset." }, - "return": "The ERC-20 AssetProxy identifier, and the address of the ERC-20 contract hosting this asset." + "return": "The AssetProxy identifier, and the address of the ERC-20 contract hosting this asset." }, "decodeERC721AssetData(bytes)": { "details": "Decode ERC-721 asset data from the format described in the AssetProxy contract specification.", @@ -713,6 +765,11 @@ "params": { "encoded": "ABI-encoded revert error." }, "return": "errorCode The error code.signerAddress The expected signer of the hash.signature The full signature bytes.errorData The revert data thrown by the validator contract." }, + "decodeStaticCallAssetData(bytes)": { + "details": "Decode StaticCall asset data from the format described in the AssetProxy contract specification.", + "params": { "assetData": "AssetProxy-compliant asset data describing a StaticCall asset" }, + "return": "The StaticCall AssetProxy identifier, the target address of the StaticCAll, the data to be passed to the target address, and the expected Keccak-256 hash of the static call return data." + }, "decodeTransactionError(bytes)": { "details": "Decompose an ABI-encoded TransactionError.", "params": { "encoded": "ABI-encoded revert error." }, @@ -759,6 +816,15 @@ }, "return": "AssetProxy-compliant data describing the set of assets." }, + "encodeStaticCallAssetData(address,bytes,bytes32)": { + "details": "Encode StaticCall asset data into the format described in the AssetProxy contract specification.", + "params": { + "expectedReturnDataHash": "Expected Keccak-256 hash of the StaticCall return data.", + "staticCallData": "Data that will be passed to staticCallTargetAddress in the StaticCall.", + "staticCallTargetAddress": "Target address of StaticCall." + }, + "return": "AssetProxy-compliant asset data describing the set of assets." + }, "getAssetProxyAllowance(address,bytes)": { "details": "Returns the number of asset(s) (described by assetData) that the corresponding AssetProxy contract is authorized to spend. When the asset data contains multiple assets (eg for Multi-Asset), the return value indicates how many complete \"baskets\" of those assets may be spent by all of the corresponding AssetProxy contracts.", "params": { @@ -858,10 +924,10 @@ }, "evm": { "bytecode": { - "object": "0x60806040523480156200001157600080fd5b5060405162005ca838038062005ca88339810160408190526200003491620003be565b600080546001600160a01b0319166001600160a01b0383811691909117918290556040517f60704108000000000000000000000000000000000000000000000000000000008152839283928392911690636070410890620000ba907ff47261b00000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b158015620000d357600080fd5b505afa158015620000e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200010e9190810190620003be565b600180546001600160a01b0319166001600160a01b039283161790556000546040517f607041080000000000000000000000000000000000000000000000000000000081529116906360704108906200018c907f025717920000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b158015620001a557600080fd5b505afa158015620001ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001e09190810190620003be565b600280546001600160a01b0319166001600160a01b039283161790556000546040517f607041080000000000000000000000000000000000000000000000000000000081529116906360704108906200025e907fa7cb5fb70000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b1580156200027757600080fd5b505afa1580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002b29190810190620003be565b600380546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000330907fc339d10a0000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b1580156200034957600080fd5b505afa1580156200035e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003849190810190620003be565b600480546001600160a01b039283166001600160a01b0319918216179091556005805495909216941693909317909255506200041b915050565b600060208284031215620003d0578081fd5b81516001600160a01b0381168114620003e7578182fd5b9392505050565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b61587d806200042b6000396000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c80639a7e752611610145578063cafd3a07116100bd578063d3d862d11161008c578063e4e6e7da11610071578063e4e6e7da1461063a578063e77286eb1461065b578063ee4f5a941461067d5761025c565b8063d3d862d114610605578063e25cabf7146106185761025c565b8063cafd3a071461059e578063d001c5dc146105bf578063d186037f146105d2578063d3637905146105e55761025c565b8063a6627e9f11610114578063b43cffe1116100f9578063b43cffe114610548578063bbb2dcf61461055b578063bc03f9641461057d5761025c565b8063a6627e9f14610512578063acaedc74146105255761025c565b80639a7e7526146104985780639eadc835146104bb578063a0901e51146104df578063a5cd62ba146104f25761025c565b8063459be5e2116101d85780636f83188e116101a75780637b66ad341161018c5780637b66ad34146104515780637d727512146104725780638f4ce479146104855761025c565b80636f83188e1461040d5780637914b2ec146104305761025c565b8063459be5e21461038a5780634dfdac20146103ab578063590aa875146103cb57806365129042146103eb5761025c565b80632322cf761161022f578063327d305411610214578063327d30541461033257806332aae3ad146103455780633db6dc61146103675761025c565b80632322cf76146102f0578063314853ff146103105761025c565b806302d0aec31461026157806304a5618a1461028b5780630d7b7d76146102ad578063165979e1146102ce575b600080fd5b61027461026f3660046149dd565b61069f565b6040516102829291906152e4565b60405180910390f35b61029e6102993660046149dd565b6106fb565b60405161028293929190615387565b6102c06102bb366004614565565b6107a9565b604051610282929190615292565b6102e16102dc3660046149dd565b6107cb565b604051610282939291906154c2565b6103036102fe366004614565565b610828565b6040516102829190615731565b61032361031e3660046149dd565b610850565b604051610282939291906152b9565b6102c06103403660046149dd565b610897565b6103586103533660046149dd565b6108d9565b60405161028293929190615438565b61037a6103753660046149dd565b61092c565b6040516102829493929190615258565b61039d6103983660046149dd565b610976565b6040516102829291906154ab565b6103be6103b936600461448c565b6109cc565b60405161028291906151f2565b6103de6103d936600461435d565b610a4f565b60405161028291906153e7565b6103fe6103f93660046149dd565b610ad3565b60405161028293929190614fdf565b61042061041b3660046149dd565b610b0d565b6040516102829493929190615535565b61044361043e3660046149dd565b61164e565b604051610282929190615301565b61046461045f3660046149dd565b611686565b604051610282929190614fc5565b610303610480366004614565565b6116be565b6104436104933660046149dd565b611dd3565b6104ab6104a63660046149dd565b611e63565b60405161028294939291906154f1565b6104ce6104c93660046149dd565b611ec4565b604051610282959493929190615324565b6103be6104ed3660046145d4565b611f6f565b61050561050036600461463a565b611fe8565b60405161028291906150f9565b6103de6105203660046145a9565b6120ac565b6105386105333660046149dd565b612133565b6040516102829493929190615055565b6103de6105563660046144da565b61216f565b61056e6105693660046149dd565b6121fc565b604051610282939291906153b2565b61059061058b3660046149dd565b6122a9565b6040516102829291906152a0565b6105b16105ac3660046149dd565b6122e2565b604051610282929190615528565b6103be6105cd36600461448c565b612330565b6103036105e0366004614565565b61239e565b6105f86105f3366004614a94565b6129e1565b60405161028291906154dd565b6103de6106133660046147e2565b612f7e565b61062b6106263660046146be565b612fb6565b60405161028293929190615146565b61064d61064836600461448c565b6130ee565b604051610282929190615233565b61066e610669366004614aec565b613107565b604051610282939291906156d5565b61069061068b3660046149dd565b613341565b60405161028293929190615481565b6000806106b3836106ae61337e565b6133a2565b60006106cc60048551866133fc9092919063ffffffff16565b8060200190516106df9190810190614990565b909350905060ff811660068111156106f357fe5b915050915091565b6000808061070f848263ffffffff61343f16565b92506001600160e01b031983167f02571792000000000000000000000000000000000000000000000000000000001461077d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107749061569e565b60405180910390fd5b61078e84601063ffffffff61347316565b91506107a184602463ffffffff6134a616565b929491935050565b6000806107b684846116be565b91506107c2848461239e565b90509250929050565b60008060006107dc846106ae6134b2565b60006107f560048651876133fc9092919063ffffffff16565b8060200190516108089190810190614d20565b9094509250905060ff8116600281111561081e57fe5b9350509193909250565b600080600061083785856107a9565b9150915061084582826134d6565b925050505b92915050565b6000606080610861846106ae6134ec565b835161087790859060049063ffffffff6133fc16565b80602001905161088a9190810190614930565b9196909550909350915050565b6000806108a6836106ae613510565b82516108bc90849060049063ffffffff6133fc16565b8060200190516108cf91908101906148d2565b9094909350915050565b60008060606108ea846106ae613534565b600061090360048651876133fc9092919063ffffffff16565b8060200190516109169190810190614cd4565b9094509250905060ff8116600181111561081e57fe5b60008060608061093e856106ae613558565b845161095490869060049063ffffffff6133fc16565b806020019051610967919081019061488e565b92989197509550909350915050565b600080610985836106ae61357c565b600061099e60048551866133fc9092919063ffffffff16565b8060200190516109b19190810190614c07565b9250905060ff811660038111156109c457fe5b925050915091565b6060600082519050806040519080825280602002602001820160405280156109fe578160200160208202803883390190505b50915060005b818114610a4757610a2885858381518110610a1b57fe5b602002602001015161239e565b838281518110610a3457fe5b6020908102919091010152600101610a04565b505092915050565b6040516060907ff47261b00000000000000000000000000000000000000000000000000000000090610a85908490602401614fb1565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050919050565b6000806000610ae4846106ae6135a0565b8351610afa90859060049063ffffffff6133fc16565b80602001905161088a91908101906143b2565b60608080806000610b24868263ffffffff61343f16565b90506001600160e01b031981167fdedfc1f1000000000000000000000000000000000000000000000000000000001415610b95576040518060400160405280601181526020017f626174636843616e63656c4f72646572730000000000000000000000000000008152509450611124565b6001600160e01b031981167f9694a402000000000000000000000000000000000000000000000000000000001415610c04576040518060400160405280600f81526020017f626174636846696c6c4f726465727300000000000000000000000000000000008152509450611124565b6001600160e01b031981167f8ea8dfe4000000000000000000000000000000000000000000000000000000001415610c73576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f77000000000000000000008152509450611124565b6001600160e01b031981167fbeee2e14000000000000000000000000000000000000000000000000000000001415610ce2576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f726465727300000000000000000000008152509450611124565b6001600160e01b031981167f2da62987000000000000000000000000000000000000000000000000000000001415610d51576040518060400160405280600b81526020017f63616e63656c4f726465720000000000000000000000000000000000000000008152509450611124565b6001600160e01b031981167f9b44d556000000000000000000000000000000000000000000000000000000001415610dc0576040518060400160405280600981526020017f66696c6c4f7264657200000000000000000000000000000000000000000000008152509450611124565b6001600160e01b031981167fe14b58c4000000000000000000000000000000000000000000000000000000001415610e2f576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f7264657200000000000000000000000000000000008152509450611124565b6001600160e01b031981167f78d29ac1000000000000000000000000000000000000000000000000000000001415610e9e576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f77000000000000000000008152509450611124565b6001600160e01b031981167f369da099000000000000000000000000000000000000000000000000000000001415610f0d576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f770000000000000000008152509450611124565b6001600160e01b031981167f8bc8efb3000000000000000000000000000000000000000000000000000000001415610f7c576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c000000000000008152509450611124565b6001600160e01b031981167fa6c3bf33000000000000000000000000000000000000000000000000000000001415610feb576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c0000000000008152509450611124565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561105a576040518060400160405280600b81526020017f6d617463684f72646572730000000000000000000000000000000000000000008152509450611124565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806110bb57506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156110f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077490615630565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610774906155f9565b6001600160e01b031981167fdedfc1f10000000000000000000000000000000000000000000000000000000014156111c957855161116c90879060049063ffffffff6135c416565b80602001905161117f9190810190614607565b604080516000808252602082019092529195505b50604080516000808252602082019092529194506111c1565b60608152602001906001900390816111ac5790505b509150611646565b6001600160e01b031981167fbeee2e1400000000000000000000000000000000000000000000000000000000148061122a57506001600160e01b031981167f9694a40200000000000000000000000000000000000000000000000000000000145b8061125e57506001600160e01b031981167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b156112785761126c86613644565b91955093509150611646565b6001600160e01b031981167f2da629870000000000000000000000000000000000000000000000000000000014156113605760408051600180825281830190925290816020015b6112c7613c90565b8152602001906001900390816112bf57505086519094506112f290879060049063ffffffff6135c416565b8060200190516113059190810190614a61565b8460008151811061131257fe5b602002602001018190525060006040519080825280602002602001820160405280156111935781602001602082028038833901905050604080516000808252602082019092529194506111c1565b6001600160e01b031981167fe14b58c40000000000000000000000000000000000000000000000000000000014806113c157506001600160e01b031981167f9b44d55600000000000000000000000000000000000000000000000000000000145b156113cf5761126c86613673565b6001600160e01b031981167f78d29ac100000000000000000000000000000000000000000000000000000000148061143057506001600160e01b031981167f369da09900000000000000000000000000000000000000000000000000000000145b8061146457506001600160e01b031981167f8bc8efb300000000000000000000000000000000000000000000000000000000145b8061149857506001600160e01b031981167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b156114a65761126c8661376d565b6001600160e01b031981167f88ec79fb000000000000000000000000000000000000000000000000000000001415611646576114e0613c90565b6114e8613c90565b60608061150260048b518c6135c49092919063ffffffff16565b8060200190516115159190810190614b43565b604080516002808252606082019092529498509296509094509250816020015b61153d613c90565b815260200190600190039081611535579050509750838860008151811061156057fe5b6020026020010181905250828860018151811061157957fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a00151876000815181106115b957fe5b6020026020010181815250508260a00151876001815181106115d757fe5b60209081029190910101526040805160028082526060820190925290816020015b60608152602001906001900390816115f8579050509550818660008151811061161d57fe5b6020026020010181905250808660018151811061163657fe5b6020026020010181905250505050505b509193509193565b60008061165d836106ae6137e1565b825161167390849060049063ffffffff6133fc16565b8060200190516108cf91908101906149b4565b600080611695836106ae613805565b82516116ab90849060049063ffffffff6133fc16565b8060200190516108cf9190810190614379565b6000806116d1838263ffffffff61343f16565b90506001600160e01b031981167ff47261b000000000000000000000000000000000000000000000000000000000141561184657600061171884601063ffffffff61347316565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611751908890602401614fb1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b0316836040516117cc9190614f95565b600060405180830381855afa9150503d8060008114611807576040519150601f19603f3d011682016040523d82523d6000602084013e61180c565b606091505b509150915081801561181f575080516020145b61182a57600061183b565b61183b81600063ffffffff6134a616565b955050505050611dcc565b6001600160e01b031981167f025717920000000000000000000000000000000000000000000000000000000014156119e157600080611884856106fb565b6040519194509250606091507f6352211e00000000000000000000000000000000000000000000000000000000906118c0908490602401615731565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b03168360405161193b9190614f95565b600060405180830381855afa9150503d8060008114611976576040519150601f19603f3d011682016040523d82523d6000602084013e61197b565b606091505b50915091506000828015611990575081516020145b61199b5760006119ac565b6119ac82600c63ffffffff61347316565b9050896001600160a01b0316816001600160a01b0316146119ce5760006119d1565b60015b60ff169750505050505050611dcc565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415611bc4576000606080611a2186611ec4565b5081519296509094509250905060005b818114611bba5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b90879085908110611a6c57fe5b6020026020010151604051602401611a85929190615089565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060876001600160a01b031683604051611b009190614f95565b600060405180830381855afa9150503d8060008114611b3b576040519150601f19603f3d011682016040523d82523d6000602084013e611b40565b606091505b50915091506000828015611b55575081516020145b611b60576000611b71565b611b7182600063ffffffff6134a616565b90506000878681518110611b8157fe5b60200260200101518281611b9157fe5b0490508b811080611ba057508b155b15611ba957809b505b505060019093019250611a31915050565b5050505050611dcc565b6001600160e01b031981167fc339d10a000000000000000000000000000000000000000000000000000000001415611d15576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611c33908690600090819081906024016153fa565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611c9a908490614f95565b600060405180830381855afa9150503d8060008114611cd5576040519150601f19603f3d011682016040523d82523d6000602084013e611cda565b606091505b5050905080611cea576000611d0c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b93505050611dcc565b6001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415611dcc57606080611d53856121fc565b80519194509250905060005b818114611dc7576000611d8589858481518110611d7857fe5b60200260200101516116be565b90506000858381518110611d9557fe5b60200260200101518281611da557fe5b04905087811080611db4575087155b15611dbd578097505b5050600101611d5f565b505050505b5092915050565b600080611de6838263ffffffff61343f16565b91506001600160e01b031982167ff47261b00000000000000000000000000000000000000000000000000000000014611e4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107749061569e565b611e5c83601063ffffffff61347316565b9050915091565b60008060006060611e76856106ae613829565b6000611e8f60048751886133fc9092919063ffffffff16565b806020019051611ea29190810190614c76565b91965094509250905060ff81166006811115611eba57fe5b9450509193509193565b60008060608080611edb868563ffffffff61343f16565b94506001600160e01b031985167fa7cb5fb70000000000000000000000000000000000000000000000000000000014611f40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107749061569e565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b6060808251604051908082528060200260200182016040528015611f9d578160200160208202803883390190505b50905060005b83518114611dcc57838181518110611fb757fe5b60200260200101516001600160a01b031631828281518110611fd557fe5b6020908102919091010152600101611fa3565b60606000845190508060405190808252806020026020018201604052801561201a578160200160208202803883390190505b50915060005b8181146120a25761206b86828151811061203657fe5b602002602001015186838151811061204a57fe5b602002602001015186848151811061205e57fe5b60200260200101516129e1565b83828151811061207757fe5b6020026020010190600481111561208a57fe5b9081600481111561209757fe5b905250600101612020565b50505b9392505050565b6040516060907f0257179200000000000000000000000000000000000000000000000000000000906120e49085908590602401615089565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152905092915050565b60006060806060612146856106ae61384d565b845161215c90869060049063ffffffff6133fc16565b80602001905161096791908101906143f4565b6040516060907fa7cb5fb700000000000000000000000000000000000000000000000000000000906121ab908790879087908790602401615003565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050949350505050565b6000606080612211848463ffffffff61343f16565b92506001600160e01b031983167f94cfcdd70000000000000000000000000000000000000000000000000000000014612276576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107749061569e565b835161228c90859060049063ffffffff6135c416565b80602001905161229f9190810190614817565b9395909450915050565b600060606122b9836106ae613871565b82516122cf90849060049063ffffffff6133fc16565b8060200190516108cf91908101906148f5565b6000806122f1836106ae613895565b600061230a60048551866133fc9092919063ffffffff16565b80602001905161231d9190810190614c07565b9250905060ff811660018111156109c457fe5b606060008251905080604051908082528060200260200182016040528015612362578160200160208202803883390190505b50915060005b818114610a475761237f85858381518110611d7857fe5b83828151811061238b57fe5b6020908102919091010152600101612368565b6000806123b1838263ffffffff61343f16565b90506001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415612463576060806123f1856121fc565b80519194509250905060005b81811461245857600061241689858481518110610a1b57fe5b9050600085838151811061242657fe5b6020026020010151828161243657fe5b04905087811080612445575087155b1561244e578097505b50506001016123fd565b5061084a9350505050565b6001600160e01b031981167ff47261b00000000000000000000000000000000000000000000000000000000014156124ee5760006124a884601063ffffffff61347316565b6001546040519192506060917fdd62ed3e00000000000000000000000000000000000000000000000000000000916117519189916001600160a01b031690602401614fc5565b6001600160e01b031981167f025717920000000000000000000000000000000000000000000000000000000014156127de5760008061252c856106fb565b600254604051929550909350606092507fe985e9c50000000000000000000000000000000000000000000000000000000091612578918a916001600160a01b0390911690602401614fc5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b0316836040516125f39190614f95565b600060405180830381855afa9150503d806000811461262e576040519150601f19603f3d011682016040523d82523d6000602084013e612633565b606091505b509150915081158061264757508051602014155b80612663575061265e81600063ffffffff6134a616565b600114155b156127b1576040516060907f081812fc000000000000000000000000000000000000000000000000000000009061269e908790602401615731565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050856001600160a01b0316816040516127159190614f95565b600060405180830381855afa9150503d8060008114612750576040519150601f19603f3d011682016040523d82523d6000602084013e612755565b606091505b509093509150828015612769575081516020145b801561279857506002546001600160a01b031661278d83600c63ffffffff61347316565b6001600160a01b0316145b6127a35760006127a6565b60015b60ff16975050611bba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505050505050611dcc565b6001600160e01b031981167fa7cb5fb700000000000000000000000000000000000000000000000000000000141561298657600061281b84611ec4565b5050600354604051929450606093507fe985e9c50000000000000000000000000000000000000000000000000000000092612865925089916001600160a01b031690602401614fc5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b0316836040516128e09190614f95565b600060405180830381855afa9150503d806000811461291b576040519150601f19603f3d011682016040523d82523d6000602084013e612920565b606091505b5091509150818015612933575080516020145b801561294f575061294b81600063ffffffff6134a616565b6001145b61295a57600061183b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff955050505050611dcc565b6001600160e01b031981167fc339d10a000000000000000000000000000000000000000000000000000000001415611dcc57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b60006129eb613d23565b612a7c8584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a3e57600080fd5b505afa158015612a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a769190810190614bef565b3a6138b9565b60408051600480825260a0820190925291925060609190816020015b6060815260200190600190039081612a9857505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a0820190925292935060609291506020820160808038833901905050905088610160015184600081518110612b2e57fe5b60200260200101819052508783600081518110612b4757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886000015182600081518110612b7957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508681600081518110612ba757fe5b60200260200101818152505088610140015184600181518110612bc657fe5b6020026020010181905250886000015183600181518110612be357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508782600181518110612c1157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612c4357fe5b602002602001018181525050886101a0015184600281518110612c6257fe5b60200260200101819052508783600281518110612c7b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612cad57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612cdf57fe5b60200260200101818152505088610180015184600381518110612cfe57fe5b6020026020010181905250886000015183600381518110612d1b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612d4d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846040015181600381518110612d7f57fe5b60209081029190910101526040516060907fb04fbddd0000000000000000000000000000000000000000000000000000000090612dc69087908790879087906024016150a2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260055491519092506060916001600160a01b031690612e2d908490614f95565b6000604051808303816000865af19150503d8060008114612e6a576040519150601f19603f3d011682016040523d82523d6000602084013e612e6f565b606091505b50915060009050612e86828263ffffffff61343f16565b9050612e90613534565b6001600160e01b031982811691161415612ed2576000612eaf836108d9565b5091505060ff81166004811115612ec257fe5b99505050505050505050506120a5565b612eda6134ec565b6001600160e01b031982811691161415612f0d576000612ef983610850565b509091505060ff81166004811115612ec257fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce01415612f4c576004985050505050505050506120a5565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610774906155c2565b6040516060907f94cfcdd700000000000000000000000000000000000000000000000000000000906120e49085908590602401615205565b606080606060008551905080604051908082528060200260200182016040528015612ffb57816020015b612fe8613d52565b815260200190600190039081612fe05790505b50935080604051908082528060200260200182016040528015613028578160200160208202803883390190505b50925080604051908082528060200260200182016040528015613055578160200160208202803883390190505b50915060005b8181146130e55761309287828151811061307157fe5b602002602001015187838151811061308557fe5b6020026020010151613107565b87518890859081106130a057fe5b602002602001018785815181106130b357fe5b602002602001018786815181106130c657fe5b931515602094850291909101909301929092529190525260010161305b565b50509250925092565b6060806130fb8484612330565b91506107c284846109cc565b61310f613d52565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b9906131599088906004016156f9565b60606040518083038186803b15801561317157600080fd5b505afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131a99190810190614a10565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f906131fb908990899060040161570c565b60206040518083038186803b15801561321357600080fd5b505afa158015613227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061324b919081019061486e565b9150600061325e82886101400151610828565b60a088015160c08901516101808a01516101408b01519394509192909160009161328d9163ffffffff61393016565b156132ba576132b3846132ad848d6080015161395590919063ffffffff16565b85613971565b9050613313565b816132ce576132b3848b6080015185613971565b60006132df868c6101800151610828565b905060006132f2868d6080015187613971565b90506000613301838688613971565b905061330d82826134d6565b93505050505b61333361332d89604001518561399b90919063ffffffff16565b826134d6565b965050505050509250925092565b6000806000613352846106ae6139ba565b600061336b60048651876133fc9092919063ffffffff16565b8060200190516108089190810190614c34565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b60006133af83600061343f565b90506001600160e01b0319808216908316146133f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077490615667565b505050565b60608183111561341a5761341a613415600085856139de565b613a4d565b83518211156134335761343361341560018487516139de565b50819003910190815290565b600081600401835110156134605761346061341560038551856004016139de565b5001602001516001600160e01b03191690565b600081601401835110156134945761349461341560048551856014016139de565b5001601401516001600160a01b031690565b60006120a58383613a55565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106134e557816120a5565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b6060818311156135dd576135dd613415600085856139de565b83518211156135f6576135f661341560018487516139de565b8282036040519080825280601f01601f191660200182016040528015613623576020820181803883390190505b5090506120a561363282613a7f565b8461363c87613a7f565b018351613a85565b606080606061366060048551866135c49092919063ffffffff16565b80602001905161088a9190810190614715565b60408051600180825281830190925260609182918291816020015b613696613c90565b81526020019060019003908161368e5750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b60608152602001906001900390816136df575050845190915061370c90859060049063ffffffff6135c416565b80602001905161371f9190810190614b9c565b8560008151811061372c57fe5b602002602001018560008151811061374057fe5b602002602001018560008151811061375457fe5b6020908102919091010192909252919052529193909250565b6040805160018082528183019092526060918291829160208083019080388339505085519193506137a99186915060049063ffffffff6135c416565b8060200190516137bc919081019061478f565b845185906000906137c957fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b6138c1613d23565b6020810184905260a085015160808601516138dd918691613b2a565b815260a085015160c08601516138f4918691613b2a565b604082015260a085015160e086015161390e918691613b2a565b6060820152613923828463ffffffff613b5e16565b6080820152949350505050565b6000815183511480156120a55750508051602091820120825192909101919091201490565b6000828201838110156120a5576120a561341560008686613b8b565b600061399383613987868563ffffffff613b5e16565b9063ffffffff613baa16565b949350505050565b6000828211156139b4576139b461341560028585613b8b565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b8484846040516024016139fd939291906154cf565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915290509392505050565b805160208201fd5b60008160200183511015613a7657613a7661341560058551856020016139de565b50016020015190565b60200190565b6020811015613aaf576001816020036101000a0380198351168185511680821786525050506133f7565b82821415613abc576133f7565b82821115613af65760208103905080820181840181515b82851015613aee578451865260209586019590940193613ad3565b9052506133f7565b60208103905080820181840183515b81861215613b215782518252601f199283019290910190613b05565b85525050505050565b6000613b37848484613bd4565b15613b4a57613b4a613415858585613c3a565b61399383613987868563ffffffff613b5e16565b600082613b6d5750600061084a565b82820282848281613b7a57fe5b04146120a5576120a5613415600186865b606063e946c1bb60e01b8484846040516024016139fd93929190615460565b600081613bc057613bc061341560038585613b8b565b6000828481613bcb57fe5b04949350505050565b600082613be657613be6613415613c59565b811580613bf1575083155b15613bfe575060006120a5565b60008380613c0857fe5b8584099050613c1d858463ffffffff613b5e16565b613c2f826103e863ffffffff613b5e16565b101595945050505050565b606063339f3de260e01b8484846040516024016139fd9392919061573a565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561084a81615816565b805161084a81615816565b600082601f830112613d98578081fd5b8135613dab613da682615777565b615750565b818152915060208083019084810181840286018201871015613dcc57600080fd5b60005b84811015611dc7578135613de281615816565b84529282019290820190600101613dcf565b600082601f830112613e04578081fd5b8151613e12613da682615777565b8181529150602080830190840160005b83811015613e4f57613e3a8760208451890101614074565b83526020928301929190910190600101613e22565b5050505092915050565b600082601f830112613e69578081fd5b8135613e77613da682615777565b8181529150602080830190840160005b83811015613e4f57613e9f8760208435890101614026565b83526020928301929190910190600101613e87565b600082601f830112613ec4578081fd5b8151613ed2613da682615777565b8181529150602080830190840160005b83811015613e4f57613efa8760208451890101614209565b83526020928301929190910190600101613ee2565b600082601f830112613f1f578081fd5b8135613f2d613da682615777565b8181529150602080830190840160005b83811015613e4f57613f5587602084358901016140ba565b83526020928301929190910190600101613f3d565b600082601f830112613f7a578081fd5b8151613f88613da682615777565b818152915060208083019084810181840286018201871015613fa957600080fd5b60005b84811015611dc757815184529282019290820190600101613fac565b600082601f830112613fd8578081fd5b8135613fe6613da682615777565b81815291506020808301908481018184028601820187101561400757600080fd5b60005b84811015611dc75781358452928201929082019060010161400a565b600082601f830112614036578081fd5b8135614044613da682615797565b915080825283602082850101111561405b57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112614084578081fd5b8151614092613da682615797565b91508082528360208285010111156140a957600080fd5b611dcc8160208401602086016157bb565b60006101c08083850312156140cd578182fd5b6140d681615750565b9150506140e38383613d72565b81526140f28360208401613d72565b60208201526141048360408401613d72565b60408201526141168360608401613d72565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8082111561417857600080fd5b61418486838701614026565b838501526101609250828501359150808211156141a057600080fd5b6141ac86838701614026565b838501526101809250828501359150808211156141c857600080fd5b6141d486838701614026565b838501526101a09250828501359150808211156141f057600080fd5b506141fd85828601614026565b82840152505092915050565b60006101c080838503121561421c578182fd5b61422581615750565b9150506142328383613d7d565b81526142418360208401613d7d565b60208201526142538360408401613d7d565b60408201526142658360608401613d7d565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff808211156142c757600080fd5b6142d386838701614074565b838501526101609250828501519150808211156142ef57600080fd5b6142fb86838701614074565b8385015261018092508285015191508082111561431757600080fd5b61432386838701614074565b838501526101a092508285015191508082111561433f57600080fd5b506141fd85828601614074565b805160ff8116811461084a57600080fd5b60006020828403121561436e578081fd5b81356120a581615816565b6000806040838503121561438b578081fd5b825161439681615816565b60208401519092506143a781615816565b809150509250929050565b6000806000606084860312156143c6578081fd5b83516143d181615816565b60208501519093506143e281615816565b80925050604084015190509250925092565b60008060008060808587031215614409578182fd5b845161441481615816565b602086015190945067ffffffffffffffff80821115614431578384fd5b61443d88838901614074565b94506040870151915080821115614452578384fd5b61445e88838901614074565b93506060870151915080821115614473578283fd5b5061448087828801614074565b91505092959194509250565b6000806040838503121561449e578182fd5b82356144a981615816565b9150602083013567ffffffffffffffff8111156144c4578182fd5b6144d085828601613e59565b9150509250929050565b600080600080608085870312156144ef578182fd5b84356144fa81615816565b9350602085013567ffffffffffffffff80821115614516578384fd5b61452288838901613fc8565b94506040870135915080821115614537578384fd5b61454388838901613fc8565b93506060870135915080821115614558578283fd5b5061448087828801614026565b60008060408385031215614577578182fd5b823561458281615816565b9150602083013567ffffffffffffffff81111561459d578182fd5b6144d085828601614026565b600080604083850312156145bb578182fd5b82356145c681615816565b946020939093013593505050565b6000602082840312156145e5578081fd5b813567ffffffffffffffff8111156145fb578182fd5b61399384828501613d88565b600060208284031215614618578081fd5b815167ffffffffffffffff81111561462e578182fd5b61399384828501613eb4565b60008060006060848603121561464e578081fd5b833567ffffffffffffffff80821115614665578283fd5b61467187838801613f0f565b94506020860135915080821115614686578283fd5b61469287838801613d88565b935060408601359150808211156146a7578283fd5b506146b486828701613fc8565b9150509250925092565b600080604083850312156146d0578182fd5b823567ffffffffffffffff808211156146e7578384fd5b6146f386838701613f0f565b93506020850135915080821115614708578283fd5b506144d085828601613e59565b600080600060608486031215614729578081fd5b835167ffffffffffffffff80821115614740578283fd5b61474c87838801613eb4565b94506020860151915080821115614761578283fd5b61476d87838801613f6a565b93506040860151915080821115614782578283fd5b506146b486828701613df4565b6000806000606084860312156147a3578081fd5b835167ffffffffffffffff808211156147ba578283fd5b6147c687838801613eb4565b9450602086015193506040860151915080821115614782578283fd5b600080604083850312156147f4578182fd5b823567ffffffffffffffff8082111561480b578384fd5b6146f386838701613fc8565b60008060408385031215614829578182fd5b825167ffffffffffffffff80821115614840578384fd5b61484c86838701613f6a565b93506020850151915080821115614861578283fd5b506144d085828601613df4565b60006020828403121561487f578081fd5b815180151581146120a5578182fd5b600080600080608085870312156148a3578182fd5b8451935060208501516148b581615816565b604086015190935067ffffffffffffffff80821115614452578384fd5b600080604083850312156148e4578182fd5b505080516020909101519092909150565b60008060408385031215614907578182fd5b82519150602083015167ffffffffffffffff811115614924578182fd5b6144d085828601614074565b600080600060608486031215614944578081fd5b83519250602084015167ffffffffffffffff80821115614962578283fd5b61496e87838801614074565b93506040860151915080821115614983578283fd5b506146b486828701614074565b600080604083850312156149a2578182fd5b8251915060208301516143a78161582b565b600080604083850312156149c6578182fd5b82516001600160e01b031981168114614396578283fd5b6000602082840312156149ee578081fd5b813567ffffffffffffffff811115614a04578182fd5b61399384828501614026565b60006060828403128015614a22578182fd5b8015614a2c578182fd5b50614a376060615750565b8251614a428161582b565b8152602083810151908201526040928301519281019290925250919050565b600060208284031215614a72578081fd5b815167ffffffffffffffff811115614a88578182fd5b61399384828501614209565b600080600060608486031215614aa8578081fd5b833567ffffffffffffffff811115614abe578182fd5b614aca868287016140ba565b9350506020840135614adb81615816565b929592945050506040919091013590565b60008060408385031215614afe578182fd5b823567ffffffffffffffff80821115614b15578384fd5b614b21868387016140ba565b93506020850135915080821115614b36578283fd5b506144d085828601614026565b60008060008060808587031215614b58578182fd5b845167ffffffffffffffff80821115614b6f578384fd5b614b7b88838901614209565b95506020870151915080821115614b90578384fd5b61443d88838901614209565b600080600060608486031215614bb0578081fd5b835167ffffffffffffffff80821115614bc7578283fd5b614bd387838801614209565b9450602086015193506040860151915080821115614983578283fd5b600060208284031215614c00578081fd5b5051919050565b60008060408385031215614c19578182fd5b8251614c248161582b565b6020939093015192949293505050565b600080600060608486031215614c48578081fd5b8351614c538161582b565b602085015160408601519194509250614c6b81615816565b809150509250925092565b60008060008060808587031215614c8b578182fd5b614c95868661434c565b9350602085015192506040850151614cac81615816565b606086015190925067ffffffffffffffff811115614cc8578182fd5b61448087828801614074565b600080600060608486031215614ce8578081fd5b614cf2858561434c565b925060208401519150604084015167ffffffffffffffff811115614d14578182fd5b6146b486828701614074565b600080600060608486031215614d34578081fd5b614d3e858561434c565b925060208401519150604084015190509250925092565b1515815260200190565b6000614d6b8383614e78565b505060600190565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614dba5781516001600160a01b0316865260209586019590910190600101614d93565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614e0f578284038852614df9848351614e4c565b6020988901989094509190910190600101614de1565b50919695505050505050565b6000815180845260208401935060208301825b82811015614dba578151865260209586019590910190600101614e2e565b60008151808452614e648160208601602086016157bb565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614ea4848451614d73565b6020830151614eb66020860182614d73565b506040830151614ec96040860182614d73565b506060830151614edc6060860182614d73565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152614f3583870182614e4c565b91505061016091508184015185820383870152614f528282614e4c565b925050506101808084015185830382870152614f6e8382614e4c565b9150506101a091508184015185820383870152614f8b8282614e4c565b9695505050505050565b60008251614fa78184602087016157bb565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b0386168252608060208301526150256080830186614e1b565b82810360408401526150378186614e1b565b83810360608501526150498186614e4c565b98975050505050505050565b60006001600160a01b0386168252608060208301526150776080830186614e4c565b82810360408401526150378186614e4c565b6001600160a01b03929092168252602082015260400190565b6000608082526150b56080830187614dc4565b82810360208401526150c78187614d80565b83810360408501526150d98187614d80565b91505082810360608401526150ee8185614e1b565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561513b5783516005811061512757fe5b835260209384019390920191600101615113565b509095945050505050565b6000606082016060835280865161515d8184615731565b9150602088019250835b8181101561518b5761517a838551614d5f565b602094909401939250600101615167565b5050838103602085015261519f8187614e1b565b91505082810360408401528084516151b78184615731565b9150602086019250835b818110156151e5576151d4838551614d55565b6020949094019392506001016151c1565b5090979650505050505050565b6000602082526120a56020830184614e1b565b6000604082526152186040830185614e1b565b828103602084015261522a8185614dc4565b95945050505050565b6000604082526152466040830185614e1b565b828103602084015261522a8185614e1b565b60008582526001600160a01b0385166020830152608060408301526152806080830185614e4c565b82810360608401526150ee8185614e4c565b918252602082015260400190565b6000838252604060208301526139936040830184614e4c565b6000848252606060208301526152d26060830185614e4c565b8281036040840152614f8b8185614e4c565b828152604081016152f48361580c565b8260208301529392505050565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a0604083015261535660a0830186614e1b565b82810360608401526153688186614e1b565b838103608085015261537a8186614e4c565b9998505050505050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b031985168252606060208301526153d56060830185614e1b565b8281036040840152614f8b8185614dc4565b6000602082526120a56020830184614e4c565b60006080825261540d6080830187614e4c565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b6000615443856157eb565b8482528360208301526060604083015261522a6060830184614e4c565b6060810161546d856157f8565b938152602081019290925260409091015290565b6060810161548e85615802565b93815260208101929092526001600160a01b031660409091015290565b604081016154b8846157f8565b9281526020015290565b6060810161546d85615802565b606081016008851061546d57fe5b60208101600583106154eb57fe5b91905290565b60006154fc8661580c565b8582528460208301526001600160a01b038416604083015260806060830152614f8b6080830184614e4c565b604081016154b8846157eb565b6000608082526155486080830187614e4c565b602083820381850152818751808452828401915082838202850101838a01865b8381101561559657601f19878403018552615584838351614e94565b94860194925090850190600101615568565b505086810360408801526155aa818a614e1b565b94505050505082810360608401526150ee8185614dc4565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a081016156e38286614e78565b8360608301528215156080830152949350505050565b6000602082526120a56020830184614e94565b60006040825261571f6040830185614e94565b828103602084015261522a8185614e4c565b90815260200190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561576f57600080fd5b604052919050565b600067ffffffffffffffff82111561578d578081fd5b5060209081020190565b600067ffffffffffffffff8211156157ad578081fd5b50601f01601f191660200190565b60005b838110156157d65781810151838201526020016157be565b838111156157e5576000848401525b50505050565b600281106157f557fe5b50565b600481106157f557fe5b600381106157f557fe5b600781106157f557fe5b6001600160a01b03811681146157f557600080fd5b60ff811681146157f557600080fdfea365627a7a723158200ea049525ebc74d73f3bf7858c601bd21168267b0dfb4abbdb7787cfd7233a2c6c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x60806040523480156200001157600080fd5b5060405162006253380380620062538339810160408190526200003491620003be565b600080546001600160a01b0319166001600160a01b0383811691909117918290556040517f60704108000000000000000000000000000000000000000000000000000000008152839283928392911690636070410890620000ba907ff47261b00000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b158015620000d357600080fd5b505afa158015620000e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200010e9190810190620003be565b600180546001600160a01b0319166001600160a01b039283161790556000546040517f607041080000000000000000000000000000000000000000000000000000000081529116906360704108906200018c907f025717920000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b158015620001a557600080fd5b505afa158015620001ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001e09190810190620003be565b600280546001600160a01b0319166001600160a01b039283161790556000546040517f607041080000000000000000000000000000000000000000000000000000000081529116906360704108906200025e907fa7cb5fb70000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b1580156200027757600080fd5b505afa1580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002b29190810190620003be565b600380546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000330907fc339d10a0000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b1580156200034957600080fd5b505afa1580156200035e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003849190810190620003be565b600480546001600160a01b039283166001600160a01b0319918216179091556005805495909216941693909317909255506200041b915050565b600060208284031215620003d0578081fd5b81516001600160a01b0381168114620003e7578182fd5b9392505050565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b615e28806200042b6000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80639a7e75261161017b578063cafd3a07116100d8578063d46950281161008c578063e4e6e7da11610071578063e4e6e7da14610711578063e77286eb14610732578063ee4f5a9414610754576102c8565b8063d4695028146106cf578063e25cabf7146106ef576102c8565b8063d186037f116100bd578063d186037f14610689578063d36379051461069c578063d3d862d1146106bc576102c8565b8063cafd3a0714610655578063d001c5dc14610676576102c8565b8063acaedc741161012f578063bbb2dcf611610114578063bbb2dcf6146105ef578063bc03f96414610611578063ca49f47c14610632576102c8565b8063acaedc74146105b9578063b43cffe1146105dc576102c8565b8063a0901e5111610160578063a0901e5114610573578063a5cd62ba14610586578063a6627e9f146105a6576102c8565b80639a7e75261461052c5780639eadc8351461054f576102c8565b806346eb65cb116102295780636f83188e116101dd5780637b66ad34116101c25780637b66ad34146104e55780637d727512146105065780638f4ce47914610519576102c8565b80636f83188e146104a15780637914b2ec146104c4576102c8565b8063590aa8751161020e578063590aa8751461044c57806363eb39921461046c578063651290421461047f576102c8565b806346eb65cb146104175780634dfdac201461042c576102c8565b8063314853ff1161028057806332aae3ad1161026557806332aae3ad146103b15780633db6dc61146103d3578063459be5e2146103f6576102c8565b8063314853ff1461037c578063327d30541461039e576102c8565b80630d7b7d76116102b15780630d7b7d7614610319578063165979e11461033a5780632322cf761461035c576102c8565b806302d0aec3146102cd57806304a5618a146102f7575b600080fd5b6102e06102db366004614f2d565b610776565b6040516102ee929190615836565b60405180910390f35b61030a610305366004614f2d565b6107d2565b6040516102ee93929190615931565b61032c610327366004614a5e565b610880565b6040516102ee9291906157e4565b61034d610348366004614f2d565b6108a2565b6040516102ee93929190615a6e565b61036f61036a366004614a5e565b6108ff565b6040516102ee9190615cdc565b61038f61038a366004614f2d565b610927565b6040516102ee9392919061580b565b61032c6103ac366004614f2d565b61096e565b6103c46103bf366004614f2d565b6109b0565b6040516102ee939291906159e2565b6103e66103e1366004614f2d565b610a03565b6040516102ee94939291906157aa565b610409610404366004614f2d565b610a4d565b6040516102ee929190615a56565b61042a610425366004614f2d565b610aa3565b005b61043f61043a366004614985565b610c36565b6040516102ee9190615744565b61045f61045a3660046147fe565b610cb9565b6040516102ee9190615991565b61045f61047a366004614aa2565b610d3d565b61049261048d366004614f2d565b610dc8565b6040516102ee93929190615511565b6104b46104af366004614f2d565b610e02565b6040516102ee9493929190615ae0565b6104d76104d2366004614f2d565b611943565b6040516102ee929190615868565b6104f86104f3366004614f2d565b61197b565b6040516102ee9291906154f7565b61036f610514366004614a5e565b6119b3565b6104d7610527366004614f2d565b6120c8565b61053f61053a366004614f2d565b612158565b6040516102ee9493929190615a9c565b61056261055d366004614f2d565b6121b9565b6040516102ee95949392919061588b565b61043f610581366004614b24565b612264565b610599610594366004614b8a565b6122dd565b6040516102ee919061565d565b61045f6105b4366004614af9565b6123a0565b6105cc6105c7366004614f2d565b612427565b6040516102ee94939291906155b9565b61045f6105ea3660046149d3565b612463565b6106026105fd366004614f2d565b6124f0565b6040516102ee9392919061595c565b61062461061f366004614f2d565b61259d565b6040516102ee9291906157f2565b610645610640366004614f2d565b6125d6565b6040516102ee94939291906158ee565b610668610663366004614f2d565b612687565b6040516102ee929190615ad3565b61043f610684366004614985565b6126d5565b61036f610697366004614a5e565b612743565b6106af6106aa366004614fe4565b612d86565b6040516102ee9190615a89565b61045f6106ca366004614d32565b613323565b6106e26106dd366004614f2d565b61335b565b6040516102ee9190615853565b6107026106fd366004614c0e565b6134a7565b6040516102ee939291906156a9565b61072461071f366004614985565b6135df565b6040516102ee929190615785565b61074561074036600461503c565b6135f8565b6040516102ee93929190615c80565b610767610762366004614f2d565b613832565b6040516102ee93929190615a2c565b60008061078a8361078561386f565b613893565b60006107a360048551866138ed9092919063ffffffff16565b8060200190516107b69190810190614ee0565b909350905060ff811660068111156107ca57fe5b915050915091565b600080806107e6848263ffffffff61393016565b92506001600160e01b031983167f025717920000000000000000000000000000000000000000000000000000000014610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b60405180910390fd5b61086584601063ffffffff61396416565b915061087884602463ffffffff61399716565b929491935050565b60008061088d84846119b3565b91506108998484612743565b90509250929050565b60008060006108b3846107856139a3565b60006108cc60048651876138ed9092919063ffffffff16565b8060200190516108df9190810190615270565b9094509250905060ff811660028111156108f557fe5b9350509193909250565b600080600061090e8585610880565b9150915061091c82826139c7565b925050505b92915050565b6000606080610938846107856139dd565b835161094e90859060049063ffffffff6138ed16565b8060200190516109619190810190614e80565b9196909550909350915050565b60008061097d83610785613a01565b825161099390849060049063ffffffff6138ed16565b8060200190516109a69190810190614e22565b9094909350915050565b60008060606109c184610785613a25565b60006109da60048651876138ed9092919063ffffffff16565b8060200190516109ed9190810190615224565b9094509250905060ff811660018111156108f557fe5b600080606080610a1585610785613a49565b8451610a2b90869060049063ffffffff6138ed16565b806020019051610a3e9190810190614dde565b92989197509550909350915050565b600080610a5c83610785613a6d565b6000610a7560048551866138ed9092919063ffffffff16565b806020019051610a889190810190615157565b9250905060ff81166003811115610a9b57fe5b925050915091565b6000610ab5828263ffffffff61393016565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415610af957610af2826120c8565b5050610c32565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415610b3c57610b34826107d2565b505050610c32565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415610b8157610b77826121b9565b5050505050610c32565b6001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415610bbc57610b34826124f0565b6001600160e01b031981167fc339d10a000000000000000000000000000000000000000000000000000000001415610c0057610bf7826125d6565b50505050610c32565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b5050565b606060008251905080604051908082528060200260200182016040528015610c68578160200160208202803883390190505b50915060005b818114610cb157610c9285858381518110610c8557fe5b6020026020010151612743565b838281518110610c9e57fe5b6020908102919091010152600101610c6e565b505092915050565b6040516060907ff47261b00000000000000000000000000000000000000000000000000000000090610cef9084906024016154e3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050919050565b6040516060907fc339d10a0000000000000000000000000000000000000000000000000000000090610d7790869086908690602401615587565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915290505b9392505050565b6000806000610dd984610785613a91565b8351610def90859060049063ffffffff6138ed16565b8060200190516109619190810190614853565b60608080806000610e19868263ffffffff61393016565b90506001600160e01b031981167fdedfc1f1000000000000000000000000000000000000000000000000000000001415610e8a576040518060400160405280601181526020017f626174636843616e63656c4f72646572730000000000000000000000000000008152509450611419565b6001600160e01b031981167f9694a402000000000000000000000000000000000000000000000000000000001415610ef9576040518060400160405280600f81526020017f626174636846696c6c4f726465727300000000000000000000000000000000008152509450611419565b6001600160e01b031981167f8ea8dfe4000000000000000000000000000000000000000000000000000000001415610f68576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f77000000000000000000008152509450611419565b6001600160e01b031981167fbeee2e14000000000000000000000000000000000000000000000000000000001415610fd7576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f726465727300000000000000000000008152509450611419565b6001600160e01b031981167f2da62987000000000000000000000000000000000000000000000000000000001415611046576040518060400160405280600b81526020017f63616e63656c4f726465720000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167f9b44d5560000000000000000000000000000000000000000000000000000000014156110b5576040518060400160405280600981526020017f66696c6c4f7264657200000000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167fe14b58c4000000000000000000000000000000000000000000000000000000001415611124576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f7264657200000000000000000000000000000000008152509450611419565b6001600160e01b031981167f78d29ac1000000000000000000000000000000000000000000000000000000001415611193576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f77000000000000000000008152509450611419565b6001600160e01b031981167f369da099000000000000000000000000000000000000000000000000000000001415611202576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f770000000000000000008152509450611419565b6001600160e01b031981167f8bc8efb3000000000000000000000000000000000000000000000000000000001415611271576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c000000000000008152509450611419565b6001600160e01b031981167fa6c3bf330000000000000000000000000000000000000000000000000000000014156112e0576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c0000000000008152509450611419565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561134f576040518060400160405280600b81526020017f6d617463684f72646572730000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806113b057506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156113e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615bdb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615ba4565b6001600160e01b031981167fdedfc1f10000000000000000000000000000000000000000000000000000000014156114be57855161146190879060049063ffffffff613ab516565b8060200190516114749190810190614b57565b604080516000808252602082019092529195505b50604080516000808252602082019092529194506114b6565b60608152602001906001900390816114a15790505b50915061193b565b6001600160e01b031981167fbeee2e1400000000000000000000000000000000000000000000000000000000148061151f57506001600160e01b031981167f9694a40200000000000000000000000000000000000000000000000000000000145b8061155357506001600160e01b031981167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b1561156d5761156186613b35565b9195509350915061193b565b6001600160e01b031981167f2da629870000000000000000000000000000000000000000000000000000000014156116555760408051600180825281830190925290816020015b6115bc614131565b8152602001906001900390816115b457505086519094506115e790879060049063ffffffff613ab516565b8060200190516115fa9190810190614fb1565b8460008151811061160757fe5b602002602001018190525060006040519080825280602002602001820160405280156114885781602001602082028038833901905050604080516000808252602082019092529194506114b6565b6001600160e01b031981167fe14b58c40000000000000000000000000000000000000000000000000000000014806116b657506001600160e01b031981167f9b44d55600000000000000000000000000000000000000000000000000000000145b156116c45761156186613b64565b6001600160e01b031981167f78d29ac100000000000000000000000000000000000000000000000000000000148061172557506001600160e01b031981167f369da09900000000000000000000000000000000000000000000000000000000145b8061175957506001600160e01b031981167f8bc8efb300000000000000000000000000000000000000000000000000000000145b8061178d57506001600160e01b031981167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561179b5761156186613c5e565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561193b576117d5614131565b6117dd614131565b6060806117f760048b518c613ab59092919063ffffffff16565b80602001905161180a9190810190615093565b604080516002808252606082019092529498509296509094509250816020015b611832614131565b81526020019060019003908161182a579050509750838860008151811061185557fe5b6020026020010181905250828860018151811061186e57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a00151876000815181106118ae57fe5b6020026020010181815250508260a00151876001815181106118cc57fe5b60209081029190910101526040805160028082526060820190925290816020015b60608152602001906001900390816118ed579050509550818660008151811061191257fe5b6020026020010181905250808660018151811061192b57fe5b6020026020010181905250505050505b509193509193565b60008061195283610785613cd2565b825161196890849060049063ffffffff6138ed16565b8060200190516109a69190810190614f04565b60008061198a83610785613cf6565b82516119a090849060049063ffffffff6138ed16565b8060200190516109a6919081019061481a565b6000806119c6838263ffffffff61393016565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415611b3b576000611a0d84601063ffffffff61396416565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611a469088906024016154e3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b031683604051611ac191906154c7565b600060405180830381855afa9150503d8060008114611afc576040519150601f19603f3d011682016040523d82523d6000602084013e611b01565b606091505b5091509150818015611b14575080516020145b611b1f576000611b30565b611b3081600063ffffffff61399716565b9550505050506120c1565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415611cd657600080611b79856107d2565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611bb5908490602401615cdc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b031683604051611c3091906154c7565b600060405180830381855afa9150503d8060008114611c6b576040519150601f19603f3d011682016040523d82523d6000602084013e611c70565b606091505b50915091506000828015611c85575081516020145b611c90576000611ca1565b611ca182600c63ffffffff61396416565b9050896001600160a01b0316816001600160a01b031614611cc3576000611cc6565b60015b60ff1697505050505050506120c1565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415611eb9576000606080611d16866121b9565b5081519296509094509250905060005b818114611eaf5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b90879085908110611d6157fe5b6020026020010151604051602401611d7a9291906155ed565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060876001600160a01b031683604051611df591906154c7565b600060405180830381855afa9150503d8060008114611e30576040519150601f19603f3d011682016040523d82523d6000602084013e611e35565b606091505b50915091506000828015611e4a575081516020145b611e55576000611e66565b611e6682600063ffffffff61399716565b90506000878681518110611e7657fe5b60200260200101518281611e8657fe5b0490508b811080611e9557508b155b15611e9e57809b505b505060019093019250611d26915050565b50505050506120c1565b6001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000141561200a576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611f28908690600090819081906024016159a4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611f8f9084906154c7565b600060405180830381855afa9150503d8060008114611fca576040519150601f19603f3d011682016040523d82523d6000602084013e611fcf565b606091505b5050905080611fdf576000612001565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b935050506120c1565b6001600160e01b031981167f94cfcdd70000000000000000000000000000000000000000000000000000000014156120c157606080612048856124f0565b80519194509250905060005b8181146120bc57600061207a8985848151811061206d57fe5b60200260200101516119b3565b9050600085838151811061208a57fe5b6020026020010151828161209a57fe5b049050878110806120a9575087155b156120b2578097505b5050600101612054565b505050505b5092915050565b6000806120db838263ffffffff61393016565b91506001600160e01b031982167ff47261b00000000000000000000000000000000000000000000000000000000014612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b61215183601063ffffffff61396416565b9050915091565b6000806000606061216b85610785613d1a565b600061218460048751886138ed9092919063ffffffff16565b80602001905161219791908101906151c6565b91965094509250905060ff811660068111156121af57fe5b9450509193509193565b600080606080806121d0868563ffffffff61393016565b94506001600160e01b031985167fa7cb5fb70000000000000000000000000000000000000000000000000000000014612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b6060808251604051908082528060200260200182016040528015612292578160200160208202803883390190505b50905060005b835181146120c1578381815181106122ac57fe5b60200260200101516001600160a01b0316318282815181106122ca57fe5b6020908102919091010152600101612298565b60606000845190508060405190808252806020026020018201604052801561230f578160200160208202803883390190505b50915060005b8181146123975761236086828151811061232b57fe5b602002602001015186838151811061233f57fe5b602002602001015186848151811061235357fe5b6020026020010151612d86565b83828151811061236c57fe5b6020026020010190600481111561237f57fe5b9081600481111561238c57fe5b905250600101612315565b50509392505050565b6040516060907f0257179200000000000000000000000000000000000000000000000000000000906123d890859085906024016155ed565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152905092915050565b6000606080606061243a85610785613d3e565b845161245090869060049063ffffffff6138ed16565b806020019051610a3e91908101906148ed565b6040516060907fa7cb5fb7000000000000000000000000000000000000000000000000000000009061249f908790879087908790602401615535565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050949350505050565b6000606080612505848463ffffffff61393016565b92506001600160e01b031983167f94cfcdd7000000000000000000000000000000000000000000000000000000001461256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b835161258090859060049063ffffffff613ab516565b8060200190516125939190810190614d67565b9395909450915050565b600060606125ad83610785613d62565b82516125c390849060049063ffffffff6138ed16565b8060200190516109a69190810190614e45565b6000806060816125ec858263ffffffff61393016565b93506001600160e01b031984167fc339d10a0000000000000000000000000000000000000000000000000000000014612651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b845161266790869060049063ffffffff613ab516565b80602001905161267a9190810190614895565b9597919650949350915050565b60008061269683610785613d86565b60006126af60048551866138ed9092919063ffffffff16565b8060200190516126c29190810190615157565b9250905060ff81166001811115610a9b57fe5b606060008251905080604051908082528060200260200182016040528015612707578160200160208202803883390190505b50915060005b818114610cb1576127248585838151811061206d57fe5b83828151811061273057fe5b602090810291909101015260010161270d565b600080612756838263ffffffff61393016565b90506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000141561280857606080612796856124f0565b80519194509250905060005b8181146127fd5760006127bb89858481518110610c8557fe5b905060008583815181106127cb57fe5b602002602001015182816127db57fe5b049050878110806127ea575087155b156127f3578097505b50506001016127a2565b506109219350505050565b6001600160e01b031981167ff47261b000000000000000000000000000000000000000000000000000000000141561289357600061284d84601063ffffffff61396416565b6001546040519192506060917fdd62ed3e0000000000000000000000000000000000000000000000000000000091611a469189916001600160a01b0316906024016154f7565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415612b83576000806128d1856107d2565b600254604051929550909350606092507fe985e9c5000000000000000000000000000000000000000000000000000000009161291d918a916001600160a01b03909116906024016154f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b03168360405161299891906154c7565b600060405180830381855afa9150503d80600081146129d3576040519150601f19603f3d011682016040523d82523d6000602084013e6129d8565b606091505b50915091508115806129ec57508051602014155b80612a085750612a0381600063ffffffff61399716565b600114155b15612b56576040516060907f081812fc0000000000000000000000000000000000000000000000000000000090612a43908790602401615cdc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050856001600160a01b031681604051612aba91906154c7565b600060405180830381855afa9150503d8060008114612af5576040519150601f19603f3d011682016040523d82523d6000602084013e612afa565b606091505b509093509150828015612b0e575081516020145b8015612b3d57506002546001600160a01b0316612b3283600c63ffffffff61396416565b6001600160a01b0316145b612b48576000612b4b565b60015b60ff16975050611eaf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965050505050506120c1565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415612d2b576000612bc0846121b9565b5050600354604051929450606093507fe985e9c50000000000000000000000000000000000000000000000000000000092612c0a925089916001600160a01b0316906024016154f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b031683604051612c8591906154c7565b600060405180830381855afa9150503d8060008114612cc0576040519150601f19603f3d011682016040523d82523d6000602084013e612cc5565b606091505b5091509150818015612cd8575080516020145b8015612cf45750612cf081600063ffffffff61399716565b6001145b612cff576000611b30565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550505050506120c1565b6001600160e01b031981167fc339d10a0000000000000000000000000000000000000000000000000000000014156120c157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b6000612d906141c4565b612e218584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612de357600080fd5b505afa158015612df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e1b919081019061513f565b3a613daa565b60408051600480825260a0820190925291925060609190816020015b6060815260200190600190039081612e3d57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a0820190925292935060609291506020820160808038833901905050905088610160015184600081518110612ed357fe5b60200260200101819052508783600081518110612eec57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886000015182600081518110612f1e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508681600081518110612f4c57fe5b60200260200101818152505088610140015184600181518110612f6b57fe5b6020026020010181905250886000015183600181518110612f8857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508782600181518110612fb657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612fe857fe5b602002602001018181525050886101a001518460028151811061300757fe5b6020026020010181905250878360028151811061302057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260028151811061305257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084606001518160028151811061308457fe5b602002602001018181525050886101800151846003815181106130a357fe5b60200260200101819052508860000151836003815181106130c057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860400151826003815181106130f257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061312457fe5b60209081029190910101526040516060907fb04fbddd000000000000000000000000000000000000000000000000000000009061316b908790879087908790602401615606565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260055491519092506060916001600160a01b0316906131d29084906154c7565b6000604051808303816000865af19150503d806000811461320f576040519150601f19603f3d011682016040523d82523d6000602084013e613214565b606091505b5091506000905061322b828263ffffffff61393016565b9050613235613a25565b6001600160e01b031982811691161415613277576000613254836109b0565b5091505060ff8116600481111561326757fe5b9950505050505050505050610dc1565b61327f6139dd565b6001600160e01b0319828116911614156132b257600061329e83610927565b509091505060ff8116600481111561326757fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce014156132f157600498505050505050505050610dc1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615b6d565b6040516060907f94cfcdd700000000000000000000000000000000000000000000000000000000906123d89085908590602401615757565b600061336d828263ffffffff61393016565b90506001600160e01b031981167ff47261b00000000000000000000000000000000000000000000000000000000014806133d057506001600160e01b031981167f0257179200000000000000000000000000000000000000000000000000000000145b8061340457506001600160e01b031981167fa7cb5fb700000000000000000000000000000000000000000000000000000000145b8061343857506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000145b8061346c57506001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000145b6134a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b919050565b6060806060600085519050806040519080825280602002602001820160405280156134ec57816020015b6134d96141f3565b8152602001906001900390816134d15790505b50935080604051908082528060200260200182016040528015613519578160200160208202803883390190505b50925080604051908082528060200260200182016040528015613546578160200160208202803883390190505b50915060005b8181146135d65761358387828151811061356257fe5b602002602001015187838151811061357657fe5b60200260200101516135f8565b875188908590811061359157fe5b602002602001018785815181106135a457fe5b602002602001018786815181106135b757fe5b931515602094850291909101909301929092529190525260010161354c565b50509250925092565b6060806135ec84846126d5565b91506108998484610c36565b6136006141f3565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b99061364a908890600401615ca4565b60606040518083038186803b15801561366257600080fd5b505afa158015613676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061369a9190810190614f60565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f906136ec9089908990600401615cb7565b60206040518083038186803b15801561370457600080fd5b505afa158015613718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061373c9190810190614dbe565b9150600061374f828861014001516108ff565b60a088015160c08901516101808a01516101408b01519394509192909160009161377e9163ffffffff613e2116565b156137ab576137a48461379e848d60800151613e4690919063ffffffff16565b85613e62565b9050613804565b816137bf576137a4848b6080015185613e62565b60006137d0868c61018001516108ff565b905060006137e3868d6080015187613e62565b905060006137f2838688613e62565b90506137fe82826139c7565b93505050505b61382461381e896040015185613e8c90919063ffffffff16565b826139c7565b965050505050509250925092565b600080600061384384610785613eab565b600061385c60048651876138ed9092919063ffffffff16565b8060200190516108df9190810190615184565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b60006138a0836000613930565b90506001600160e01b0319808216908316146138e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c12565b505050565b60608183111561390b5761390b61390660008585613ecf565b613eee565b8351821115613924576139246139066001848751613ecf565b50819003910190815290565b60008160040183511015613951576139516139066003855185600401613ecf565b5001602001516001600160e01b03191690565b60008160140183511015613985576139856139066004855185601401613ecf565b5001601401516001600160a01b031690565b6000610dc18383613ef6565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106139d65781610dc1565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b606081831115613ace57613ace61390660008585613ecf565b8351821115613ae757613ae76139066001848751613ecf565b8282036040519080825280601f01601f191660200182016040528015613b14576020820181803883390190505b509050610dc1613b2382613f20565b84613b2d87613f20565b018351613f26565b6060806060613b516004855186613ab59092919063ffffffff16565b8060200190516109619190810190614c65565b60408051600180825281830190925260609182918291816020015b613b87614131565b815260200190600190039081613b7f5750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613bd05750508451909150613bfd90859060049063ffffffff613ab516565b806020019051613c1091908101906150ec565b85600081518110613c1d57fe5b6020026020010185600081518110613c3157fe5b6020026020010185600081518110613c4557fe5b6020908102919091010192909252919052529193909250565b604080516001808252818301909252606091829182916020808301908038833950508551919350613c9a9186915060049063ffffffff613ab516565b806020019051613cad9190810190614cdf565b84518590600090613cba57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b613db26141c4565b6020810184905260a08501516080860151613dce918691613fcb565b815260a085015160c0860151613de5918691613fcb565b604082015260a085015160e0860151613dff918691613fcb565b6060820152613e14828463ffffffff613fff16565b6080820152949350505050565b600081518351148015610dc15750508051602091820120825192909101919091201490565b600082820183811015610dc157610dc16139066000868661402c565b6000613e8483613e78868563ffffffff613fff16565b9063ffffffff61404b16565b949350505050565b600082821115613ea557613ea56139066002858561402c565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610d7793929190615a7b565b805160208201fd5b60008160200183511015613f1757613f176139066005855185602001613ecf565b50016020015190565b60200190565b6020811015613f50576001816020036101000a0380198351168185511680821786525050506138e8565b82821415613f5d576138e8565b82821115613f975760208103905080820181840181515b82851015613f8f578451865260209586019590940193613f74565b9052506138e8565b60208103905080820181840183515b81861215613fc25782518252601f199283019290910190613fa6565b85525050505050565b6000613fd8848484614075565b15613feb57613feb6139068585856140db565b613e8483613e78868563ffffffff613fff16565b60008261400e57506000610921565b8282028284828161401b57fe5b0414610dc157610dc1613906600186865b606063e946c1bb60e01b848484604051602401610d7793929190615a0a565b600081614061576140616139066003858561402c565b600082848161406c57fe5b04949350505050565b600082614087576140876139066140fa565b811580614092575083155b1561409f57506000610dc1565b600083806140a957fe5b85840990506140be858463ffffffff613fff16565b6140d0826103e863ffffffff613fff16565b101595945050505050565b606063339f3de260e01b848484604051602401610d7793929190615ce5565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561092181615dc1565b805161092181615dc1565b600082601f830112614239578081fd5b813561424c61424782615d22565b615cfb565b81815291506020808301908481018184028601820187101561426d57600080fd5b60005b848110156120bc57813561428381615dc1565b84529282019290820190600101614270565b600082601f8301126142a5578081fd5b81516142b361424782615d22565b8181529150602080830190840160005b838110156142f0576142db8760208451890101614515565b835260209283019291909101906001016142c3565b5050505092915050565b600082601f83011261430a578081fd5b813561431861424782615d22565b8181529150602080830190840160005b838110156142f05761434087602084358901016144c7565b83526020928301929190910190600101614328565b600082601f830112614365578081fd5b815161437361424782615d22565b8181529150602080830190840160005b838110156142f05761439b87602084518901016146aa565b83526020928301929190910190600101614383565b600082601f8301126143c0578081fd5b81356143ce61424782615d22565b8181529150602080830190840160005b838110156142f0576143f6876020843589010161455b565b835260209283019291909101906001016143de565b600082601f83011261441b578081fd5b815161442961424782615d22565b81815291506020808301908481018184028601820187101561444a57600080fd5b60005b848110156120bc5781518452928201929082019060010161444d565b600082601f830112614479578081fd5b813561448761424782615d22565b8181529150602080830190848101818402860182018710156144a857600080fd5b60005b848110156120bc578135845292820192908201906001016144ab565b600082601f8301126144d7578081fd5b81356144e561424782615d42565b91508082528360208285010111156144fc57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112614525578081fd5b815161453361424782615d42565b915080825283602082850101111561454a57600080fd5b6120c1816020840160208601615d66565b60006101c080838503121561456e578182fd5b61457781615cfb565b9150506145848383614213565b81526145938360208401614213565b60208201526145a58360408401614213565b60408201526145b78360608401614213565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8082111561461957600080fd5b614625868387016144c7565b8385015261016092508285013591508082111561464157600080fd5b61464d868387016144c7565b8385015261018092508285013591508082111561466957600080fd5b614675868387016144c7565b838501526101a092508285013591508082111561469157600080fd5b5061469e858286016144c7565b82840152505092915050565b60006101c08083850312156146bd578182fd5b6146c681615cfb565b9150506146d3838361421e565b81526146e2836020840161421e565b60208201526146f4836040840161421e565b6040820152614706836060840161421e565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561476857600080fd5b61477486838701614515565b8385015261016092508285015191508082111561479057600080fd5b61479c86838701614515565b838501526101809250828501519150808211156147b857600080fd5b6147c486838701614515565b838501526101a09250828501519150808211156147e057600080fd5b5061469e85828601614515565b805160ff8116811461092157600080fd5b60006020828403121561480f578081fd5b8135610dc181615dc1565b6000806040838503121561482c578081fd5b825161483781615dc1565b602084015190925061484881615dc1565b809150509250929050565b600080600060608486031215614867578081fd5b835161487281615dc1565b602085015190935061488381615dc1565b80925050604084015190509250925092565b6000806000606084860312156148a9578081fd5b83516148b481615dc1565b602085015190935067ffffffffffffffff8111156148d0578182fd5b6148dc86828701614515565b925050604084015190509250925092565b60008060008060808587031215614902578182fd5b845161490d81615dc1565b602086015190945067ffffffffffffffff8082111561492a578384fd5b61493688838901614515565b9450604087015191508082111561494b578384fd5b61495788838901614515565b9350606087015191508082111561496c578283fd5b5061497987828801614515565b91505092959194509250565b60008060408385031215614997578182fd5b82356149a281615dc1565b9150602083013567ffffffffffffffff8111156149bd578182fd5b6149c9858286016142fa565b9150509250929050565b600080600080608085870312156149e8578182fd5b84356149f381615dc1565b9350602085013567ffffffffffffffff80821115614a0f578384fd5b614a1b88838901614469565b94506040870135915080821115614a30578384fd5b614a3c88838901614469565b93506060870135915080821115614a51578283fd5b50614979878288016144c7565b60008060408385031215614a70578182fd5b8235614a7b81615dc1565b9150602083013567ffffffffffffffff811115614a96578182fd5b6149c9858286016144c7565b600080600060608486031215614ab6578081fd5b8335614ac181615dc1565b9250602084013567ffffffffffffffff811115614adc578182fd5b614ae8868287016144c7565b925050604084013590509250925092565b60008060408385031215614b0b578182fd5b8235614b1681615dc1565b946020939093013593505050565b600060208284031215614b35578081fd5b813567ffffffffffffffff811115614b4b578182fd5b613e8484828501614229565b600060208284031215614b68578081fd5b815167ffffffffffffffff811115614b7e578182fd5b613e8484828501614355565b600080600060608486031215614b9e578081fd5b833567ffffffffffffffff80821115614bb5578283fd5b614bc1878388016143b0565b94506020860135915080821115614bd6578283fd5b614be287838801614229565b93506040860135915080821115614bf7578283fd5b50614c0486828701614469565b9150509250925092565b60008060408385031215614c20578182fd5b823567ffffffffffffffff80821115614c37578384fd5b614c43868387016143b0565b93506020850135915080821115614c58578283fd5b506149c9858286016142fa565b600080600060608486031215614c79578081fd5b835167ffffffffffffffff80821115614c90578283fd5b614c9c87838801614355565b94506020860151915080821115614cb1578283fd5b614cbd8783880161440b565b93506040860151915080821115614cd2578283fd5b50614c0486828701614295565b600080600060608486031215614cf3578081fd5b835167ffffffffffffffff80821115614d0a578283fd5b614d1687838801614355565b9450602086015193506040860151915080821115614cd2578283fd5b60008060408385031215614d44578182fd5b823567ffffffffffffffff80821115614d5b578384fd5b614c4386838701614469565b60008060408385031215614d79578182fd5b825167ffffffffffffffff80821115614d90578384fd5b614d9c8683870161440b565b93506020850151915080821115614db1578283fd5b506149c985828601614295565b600060208284031215614dcf578081fd5b81518015158114610dc1578182fd5b60008060008060808587031215614df3578182fd5b845193506020850151614e0581615dc1565b604086015190935067ffffffffffffffff8082111561494b578384fd5b60008060408385031215614e34578182fd5b505080516020909101519092909150565b60008060408385031215614e57578182fd5b82519150602083015167ffffffffffffffff811115614e74578182fd5b6149c985828601614515565b600080600060608486031215614e94578081fd5b83519250602084015167ffffffffffffffff80821115614eb2578283fd5b614ebe87838801614515565b93506040860151915080821115614ed3578283fd5b50614c0486828701614515565b60008060408385031215614ef2578182fd5b82519150602083015161484881615dd6565b60008060408385031215614f16578182fd5b82516001600160e01b031981168114614837578283fd5b600060208284031215614f3e578081fd5b813567ffffffffffffffff811115614f54578182fd5b613e84848285016144c7565b60006060828403128015614f72578182fd5b8015614f7c578182fd5b50614f876060615cfb565b614f9184846147ed565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614fc2578081fd5b815167ffffffffffffffff811115614fd8578182fd5b613e84848285016146aa565b600080600060608486031215614ff8578081fd5b833567ffffffffffffffff81111561500e578182fd5b61501a8682870161455b565b935050602084013561502b81615dc1565b929592945050506040919091013590565b6000806040838503121561504e578182fd5b823567ffffffffffffffff80821115615065578384fd5b6150718683870161455b565b93506020850135915080821115615086578283fd5b506149c9858286016144c7565b600080600080608085870312156150a8578182fd5b845167ffffffffffffffff808211156150bf578384fd5b6150cb888389016146aa565b955060208701519150808211156150e0578384fd5b614936888389016146aa565b600080600060608486031215615100578081fd5b835167ffffffffffffffff80821115615117578283fd5b615123878388016146aa565b9450602086015193506040860151915080821115614ed3578283fd5b600060208284031215615150578081fd5b5051919050565b60008060408385031215615169578182fd5b825161517481615dd6565b6020939093015192949293505050565b600080600060608486031215615198578081fd5b83516151a381615dd6565b6020850151604086015191945092506151bb81615dc1565b809150509250925092565b600080600080608085870312156151db578182fd5b6151e586866147ed565b93506020850151925060408501516151fc81615dc1565b606086015190925067ffffffffffffffff811115615218578182fd5b61497987828801614515565b600080600060608486031215615238578081fd5b61524285856147ed565b925060208401519150604084015167ffffffffffffffff811115615264578182fd5b614c0486828701614515565b600080600060608486031215615284578081fd5b61528e85856147ed565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b828110156152ec5781516001600160a01b03168652602095860195909101906001016152c5565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b8481101561534157828403885261532b84835161537e565b6020988901989094509190910190600101615313565b50919695505050505050565b6000815180845260208401935060208301825b828110156152ec578151865260209586019590910190600101615360565b60008151808452615396816020860160208601615d66565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c06153d68484516152a5565b60208301516153e860208601826152a5565b5060408301516153fb60408601826152a5565b50606083015161540e60608601826152a5565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015181860152506101408084015182828701526154678387018261537e565b91505061016091508184015185820383870152615484828261537e565b9250505061018080840151858303828701526154a0838261537e565b9150506101a0915081840151858203838701526154bd828261537e565b9695505050505050565b600082516154d9818460208701615d66565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b038616825260806020830152615557608083018661534d565b8281036040840152615569818661534d565b838103606085015261557b818661537e565b98975050505050505050565b60006001600160a01b0385168252606060208301526155a9606083018561537e565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526155db608083018661537e565b8281036040840152615569818661537e565b6001600160a01b03929092168252602082015260400190565b60006080825261561960808301876152f6565b828103602084015261562b81876152b2565b838103604085015261563d81876152b2565b9150508281036060840152615652818561534d565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561569e57835161568a81615db7565b835260209384019390920191600101615677565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b828110156156ec576156d98483516153aa565b60609390930192908401906001016156c6565b50505083810382850152615700818761534d565b84810360408601528551808252908301915082860190845b81811015615736578251151584529284019291840191600101615718565b509198975050505050505050565b600060208252610dc1602083018461534d565b60006040825261576a604083018561534d565b828103602084015261577c81856152f6565b95945050505050565b600060408252615798604083018561534d565b828103602084015261577c818561534d565b60008582526001600160a01b0385166020830152608060408301526157d2608083018561537e565b8281036060840152615652818561537e565b918252602082015260400190565b600083825260406020830152613e84604083018461537e565b600084825260606020830152615824606083018561537e565b82810360408401526154bd818561537e565b8281526040810161584683615dad565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a060408301526158bd60a083018661534d565b82810360608401526158cf818661534d565b83810360808501526158e1818661537e565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b038516602083015260806040830152615920608083018561537e565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b0319851682526060602083015261597f606083018561534d565b82810360408401526154bd81856152f6565b600060208252610dc1602083018461537e565b6000608082526159b7608083018761537e565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006159ed85615d96565b8482528360208301526060604083015261577c606083018461537e565b6060810160048510615a1857fe5b938152602081019290925260409091015290565b60608101615a3985615da3565b93815260208101929092526001600160a01b031660409091015290565b6040810160048410615a6457fe5b9281526020015290565b60608101615a1885615da3565b6060810160088510615a1857fe5b60208101615a9683615db7565b91905290565b6000615aa786615dad565b8582528460208301526001600160a01b0384166040830152608060608301526154bd608083018461537e565b60408101615a6484615d96565b600060808252615af3608083018761537e565b602083820381850152818751808452828401915082838202850101838a01865b83811015615b4157601f19878403018552615b2f8383516153c6565b94860194925090850190600101615b13565b50508681036040880152615b55818a61534d565b945050505050828103606084015261565281856152f6565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a08101615c8e82866153aa565b8360608301528215156080830152949350505050565b600060208252610dc160208301846153c6565b600060408252615cca60408301856153c6565b828103602084015261577c818561537e565b90815260200190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff81118282101715615d1a57600080fd5b604052919050565b600067ffffffffffffffff821115615d38578081fd5b5060209081020190565b600067ffffffffffffffff821115615d58578081fd5b50601f01601f191660200190565b60005b83811015615d81578181015183820152602001615d69565b83811115615d90576000848401525b50505050565b60028110615da057fe5b50565b60038110615da057fe5b60078110615da057fe5b60058110615da057fe5b6001600160a01b0381168114615da057600080fd5b60ff81168114615da057600080fdfea365627a7a723158209bd08114ba2e3dada6fb089e11dba7dc3bfedf454a0bac82e7a05d67b08360dd6c6578706572696d656e74616cf564736f6c634300050c0040" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b506004361061025c5760003560e01c80639a7e752611610145578063cafd3a07116100bd578063d3d862d11161008c578063e4e6e7da11610071578063e4e6e7da1461063a578063e77286eb1461065b578063ee4f5a941461067d5761025c565b8063d3d862d114610605578063e25cabf7146106185761025c565b8063cafd3a071461059e578063d001c5dc146105bf578063d186037f146105d2578063d3637905146105e55761025c565b8063a6627e9f11610114578063b43cffe1116100f9578063b43cffe114610548578063bbb2dcf61461055b578063bc03f9641461057d5761025c565b8063a6627e9f14610512578063acaedc74146105255761025c565b80639a7e7526146104985780639eadc835146104bb578063a0901e51146104df578063a5cd62ba146104f25761025c565b8063459be5e2116101d85780636f83188e116101a75780637b66ad341161018c5780637b66ad34146104515780637d727512146104725780638f4ce479146104855761025c565b80636f83188e1461040d5780637914b2ec146104305761025c565b8063459be5e21461038a5780634dfdac20146103ab578063590aa875146103cb57806365129042146103eb5761025c565b80632322cf761161022f578063327d305411610214578063327d30541461033257806332aae3ad146103455780633db6dc61146103675761025c565b80632322cf76146102f0578063314853ff146103105761025c565b806302d0aec31461026157806304a5618a1461028b5780630d7b7d76146102ad578063165979e1146102ce575b600080fd5b61027461026f3660046149dd565b61069f565b6040516102829291906152e4565b60405180910390f35b61029e6102993660046149dd565b6106fb565b60405161028293929190615387565b6102c06102bb366004614565565b6107a9565b604051610282929190615292565b6102e16102dc3660046149dd565b6107cb565b604051610282939291906154c2565b6103036102fe366004614565565b610828565b6040516102829190615731565b61032361031e3660046149dd565b610850565b604051610282939291906152b9565b6102c06103403660046149dd565b610897565b6103586103533660046149dd565b6108d9565b60405161028293929190615438565b61037a6103753660046149dd565b61092c565b6040516102829493929190615258565b61039d6103983660046149dd565b610976565b6040516102829291906154ab565b6103be6103b936600461448c565b6109cc565b60405161028291906151f2565b6103de6103d936600461435d565b610a4f565b60405161028291906153e7565b6103fe6103f93660046149dd565b610ad3565b60405161028293929190614fdf565b61042061041b3660046149dd565b610b0d565b6040516102829493929190615535565b61044361043e3660046149dd565b61164e565b604051610282929190615301565b61046461045f3660046149dd565b611686565b604051610282929190614fc5565b610303610480366004614565565b6116be565b6104436104933660046149dd565b611dd3565b6104ab6104a63660046149dd565b611e63565b60405161028294939291906154f1565b6104ce6104c93660046149dd565b611ec4565b604051610282959493929190615324565b6103be6104ed3660046145d4565b611f6f565b61050561050036600461463a565b611fe8565b60405161028291906150f9565b6103de6105203660046145a9565b6120ac565b6105386105333660046149dd565b612133565b6040516102829493929190615055565b6103de6105563660046144da565b61216f565b61056e6105693660046149dd565b6121fc565b604051610282939291906153b2565b61059061058b3660046149dd565b6122a9565b6040516102829291906152a0565b6105b16105ac3660046149dd565b6122e2565b604051610282929190615528565b6103be6105cd36600461448c565b612330565b6103036105e0366004614565565b61239e565b6105f86105f3366004614a94565b6129e1565b60405161028291906154dd565b6103de6106133660046147e2565b612f7e565b61062b6106263660046146be565b612fb6565b60405161028293929190615146565b61064d61064836600461448c565b6130ee565b604051610282929190615233565b61066e610669366004614aec565b613107565b604051610282939291906156d5565b61069061068b3660046149dd565b613341565b60405161028293929190615481565b6000806106b3836106ae61337e565b6133a2565b60006106cc60048551866133fc9092919063ffffffff16565b8060200190516106df9190810190614990565b909350905060ff811660068111156106f357fe5b915050915091565b6000808061070f848263ffffffff61343f16565b92506001600160e01b031983167f02571792000000000000000000000000000000000000000000000000000000001461077d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107749061569e565b60405180910390fd5b61078e84601063ffffffff61347316565b91506107a184602463ffffffff6134a616565b929491935050565b6000806107b684846116be565b91506107c2848461239e565b90509250929050565b60008060006107dc846106ae6134b2565b60006107f560048651876133fc9092919063ffffffff16565b8060200190516108089190810190614d20565b9094509250905060ff8116600281111561081e57fe5b9350509193909250565b600080600061083785856107a9565b9150915061084582826134d6565b925050505b92915050565b6000606080610861846106ae6134ec565b835161087790859060049063ffffffff6133fc16565b80602001905161088a9190810190614930565b9196909550909350915050565b6000806108a6836106ae613510565b82516108bc90849060049063ffffffff6133fc16565b8060200190516108cf91908101906148d2565b9094909350915050565b60008060606108ea846106ae613534565b600061090360048651876133fc9092919063ffffffff16565b8060200190516109169190810190614cd4565b9094509250905060ff8116600181111561081e57fe5b60008060608061093e856106ae613558565b845161095490869060049063ffffffff6133fc16565b806020019051610967919081019061488e565b92989197509550909350915050565b600080610985836106ae61357c565b600061099e60048551866133fc9092919063ffffffff16565b8060200190516109b19190810190614c07565b9250905060ff811660038111156109c457fe5b925050915091565b6060600082519050806040519080825280602002602001820160405280156109fe578160200160208202803883390190505b50915060005b818114610a4757610a2885858381518110610a1b57fe5b602002602001015161239e565b838281518110610a3457fe5b6020908102919091010152600101610a04565b505092915050565b6040516060907ff47261b00000000000000000000000000000000000000000000000000000000090610a85908490602401614fb1565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050919050565b6000806000610ae4846106ae6135a0565b8351610afa90859060049063ffffffff6133fc16565b80602001905161088a91908101906143b2565b60608080806000610b24868263ffffffff61343f16565b90506001600160e01b031981167fdedfc1f1000000000000000000000000000000000000000000000000000000001415610b95576040518060400160405280601181526020017f626174636843616e63656c4f72646572730000000000000000000000000000008152509450611124565b6001600160e01b031981167f9694a402000000000000000000000000000000000000000000000000000000001415610c04576040518060400160405280600f81526020017f626174636846696c6c4f726465727300000000000000000000000000000000008152509450611124565b6001600160e01b031981167f8ea8dfe4000000000000000000000000000000000000000000000000000000001415610c73576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f77000000000000000000008152509450611124565b6001600160e01b031981167fbeee2e14000000000000000000000000000000000000000000000000000000001415610ce2576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f726465727300000000000000000000008152509450611124565b6001600160e01b031981167f2da62987000000000000000000000000000000000000000000000000000000001415610d51576040518060400160405280600b81526020017f63616e63656c4f726465720000000000000000000000000000000000000000008152509450611124565b6001600160e01b031981167f9b44d556000000000000000000000000000000000000000000000000000000001415610dc0576040518060400160405280600981526020017f66696c6c4f7264657200000000000000000000000000000000000000000000008152509450611124565b6001600160e01b031981167fe14b58c4000000000000000000000000000000000000000000000000000000001415610e2f576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f7264657200000000000000000000000000000000008152509450611124565b6001600160e01b031981167f78d29ac1000000000000000000000000000000000000000000000000000000001415610e9e576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f77000000000000000000008152509450611124565b6001600160e01b031981167f369da099000000000000000000000000000000000000000000000000000000001415610f0d576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f770000000000000000008152509450611124565b6001600160e01b031981167f8bc8efb3000000000000000000000000000000000000000000000000000000001415610f7c576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c000000000000008152509450611124565b6001600160e01b031981167fa6c3bf33000000000000000000000000000000000000000000000000000000001415610feb576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c0000000000008152509450611124565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561105a576040518060400160405280600b81526020017f6d617463684f72646572730000000000000000000000000000000000000000008152509450611124565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806110bb57506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156110f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077490615630565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610774906155f9565b6001600160e01b031981167fdedfc1f10000000000000000000000000000000000000000000000000000000014156111c957855161116c90879060049063ffffffff6135c416565b80602001905161117f9190810190614607565b604080516000808252602082019092529195505b50604080516000808252602082019092529194506111c1565b60608152602001906001900390816111ac5790505b509150611646565b6001600160e01b031981167fbeee2e1400000000000000000000000000000000000000000000000000000000148061122a57506001600160e01b031981167f9694a40200000000000000000000000000000000000000000000000000000000145b8061125e57506001600160e01b031981167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b156112785761126c86613644565b91955093509150611646565b6001600160e01b031981167f2da629870000000000000000000000000000000000000000000000000000000014156113605760408051600180825281830190925290816020015b6112c7613c90565b8152602001906001900390816112bf57505086519094506112f290879060049063ffffffff6135c416565b8060200190516113059190810190614a61565b8460008151811061131257fe5b602002602001018190525060006040519080825280602002602001820160405280156111935781602001602082028038833901905050604080516000808252602082019092529194506111c1565b6001600160e01b031981167fe14b58c40000000000000000000000000000000000000000000000000000000014806113c157506001600160e01b031981167f9b44d55600000000000000000000000000000000000000000000000000000000145b156113cf5761126c86613673565b6001600160e01b031981167f78d29ac100000000000000000000000000000000000000000000000000000000148061143057506001600160e01b031981167f369da09900000000000000000000000000000000000000000000000000000000145b8061146457506001600160e01b031981167f8bc8efb300000000000000000000000000000000000000000000000000000000145b8061149857506001600160e01b031981167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b156114a65761126c8661376d565b6001600160e01b031981167f88ec79fb000000000000000000000000000000000000000000000000000000001415611646576114e0613c90565b6114e8613c90565b60608061150260048b518c6135c49092919063ffffffff16565b8060200190516115159190810190614b43565b604080516002808252606082019092529498509296509094509250816020015b61153d613c90565b815260200190600190039081611535579050509750838860008151811061156057fe5b6020026020010181905250828860018151811061157957fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a00151876000815181106115b957fe5b6020026020010181815250508260a00151876001815181106115d757fe5b60209081029190910101526040805160028082526060820190925290816020015b60608152602001906001900390816115f8579050509550818660008151811061161d57fe5b6020026020010181905250808660018151811061163657fe5b6020026020010181905250505050505b509193509193565b60008061165d836106ae6137e1565b825161167390849060049063ffffffff6133fc16565b8060200190516108cf91908101906149b4565b600080611695836106ae613805565b82516116ab90849060049063ffffffff6133fc16565b8060200190516108cf9190810190614379565b6000806116d1838263ffffffff61343f16565b90506001600160e01b031981167ff47261b000000000000000000000000000000000000000000000000000000000141561184657600061171884601063ffffffff61347316565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611751908890602401614fb1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b0316836040516117cc9190614f95565b600060405180830381855afa9150503d8060008114611807576040519150601f19603f3d011682016040523d82523d6000602084013e61180c565b606091505b509150915081801561181f575080516020145b61182a57600061183b565b61183b81600063ffffffff6134a616565b955050505050611dcc565b6001600160e01b031981167f025717920000000000000000000000000000000000000000000000000000000014156119e157600080611884856106fb565b6040519194509250606091507f6352211e00000000000000000000000000000000000000000000000000000000906118c0908490602401615731565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b03168360405161193b9190614f95565b600060405180830381855afa9150503d8060008114611976576040519150601f19603f3d011682016040523d82523d6000602084013e61197b565b606091505b50915091506000828015611990575081516020145b61199b5760006119ac565b6119ac82600c63ffffffff61347316565b9050896001600160a01b0316816001600160a01b0316146119ce5760006119d1565b60015b60ff169750505050505050611dcc565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415611bc4576000606080611a2186611ec4565b5081519296509094509250905060005b818114611bba5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b90879085908110611a6c57fe5b6020026020010151604051602401611a85929190615089565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060876001600160a01b031683604051611b009190614f95565b600060405180830381855afa9150503d8060008114611b3b576040519150601f19603f3d011682016040523d82523d6000602084013e611b40565b606091505b50915091506000828015611b55575081516020145b611b60576000611b71565b611b7182600063ffffffff6134a616565b90506000878681518110611b8157fe5b60200260200101518281611b9157fe5b0490508b811080611ba057508b155b15611ba957809b505b505060019093019250611a31915050565b5050505050611dcc565b6001600160e01b031981167fc339d10a000000000000000000000000000000000000000000000000000000001415611d15576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611c33908690600090819081906024016153fa565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611c9a908490614f95565b600060405180830381855afa9150503d8060008114611cd5576040519150601f19603f3d011682016040523d82523d6000602084013e611cda565b606091505b5050905080611cea576000611d0c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b93505050611dcc565b6001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415611dcc57606080611d53856121fc565b80519194509250905060005b818114611dc7576000611d8589858481518110611d7857fe5b60200260200101516116be565b90506000858381518110611d9557fe5b60200260200101518281611da557fe5b04905087811080611db4575087155b15611dbd578097505b5050600101611d5f565b505050505b5092915050565b600080611de6838263ffffffff61343f16565b91506001600160e01b031982167ff47261b00000000000000000000000000000000000000000000000000000000014611e4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107749061569e565b611e5c83601063ffffffff61347316565b9050915091565b60008060006060611e76856106ae613829565b6000611e8f60048751886133fc9092919063ffffffff16565b806020019051611ea29190810190614c76565b91965094509250905060ff81166006811115611eba57fe5b9450509193509193565b60008060608080611edb868563ffffffff61343f16565b94506001600160e01b031985167fa7cb5fb70000000000000000000000000000000000000000000000000000000014611f40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107749061569e565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b6060808251604051908082528060200260200182016040528015611f9d578160200160208202803883390190505b50905060005b83518114611dcc57838181518110611fb757fe5b60200260200101516001600160a01b031631828281518110611fd557fe5b6020908102919091010152600101611fa3565b60606000845190508060405190808252806020026020018201604052801561201a578160200160208202803883390190505b50915060005b8181146120a25761206b86828151811061203657fe5b602002602001015186838151811061204a57fe5b602002602001015186848151811061205e57fe5b60200260200101516129e1565b83828151811061207757fe5b6020026020010190600481111561208a57fe5b9081600481111561209757fe5b905250600101612020565b50505b9392505050565b6040516060907f0257179200000000000000000000000000000000000000000000000000000000906120e49085908590602401615089565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152905092915050565b60006060806060612146856106ae61384d565b845161215c90869060049063ffffffff6133fc16565b80602001905161096791908101906143f4565b6040516060907fa7cb5fb700000000000000000000000000000000000000000000000000000000906121ab908790879087908790602401615003565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050949350505050565b6000606080612211848463ffffffff61343f16565b92506001600160e01b031983167f94cfcdd70000000000000000000000000000000000000000000000000000000014612276576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107749061569e565b835161228c90859060049063ffffffff6135c416565b80602001905161229f9190810190614817565b9395909450915050565b600060606122b9836106ae613871565b82516122cf90849060049063ffffffff6133fc16565b8060200190516108cf91908101906148f5565b6000806122f1836106ae613895565b600061230a60048551866133fc9092919063ffffffff16565b80602001905161231d9190810190614c07565b9250905060ff811660018111156109c457fe5b606060008251905080604051908082528060200260200182016040528015612362578160200160208202803883390190505b50915060005b818114610a475761237f85858381518110611d7857fe5b83828151811061238b57fe5b6020908102919091010152600101612368565b6000806123b1838263ffffffff61343f16565b90506001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415612463576060806123f1856121fc565b80519194509250905060005b81811461245857600061241689858481518110610a1b57fe5b9050600085838151811061242657fe5b6020026020010151828161243657fe5b04905087811080612445575087155b1561244e578097505b50506001016123fd565b5061084a9350505050565b6001600160e01b031981167ff47261b00000000000000000000000000000000000000000000000000000000014156124ee5760006124a884601063ffffffff61347316565b6001546040519192506060917fdd62ed3e00000000000000000000000000000000000000000000000000000000916117519189916001600160a01b031690602401614fc5565b6001600160e01b031981167f025717920000000000000000000000000000000000000000000000000000000014156127de5760008061252c856106fb565b600254604051929550909350606092507fe985e9c50000000000000000000000000000000000000000000000000000000091612578918a916001600160a01b0390911690602401614fc5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b0316836040516125f39190614f95565b600060405180830381855afa9150503d806000811461262e576040519150601f19603f3d011682016040523d82523d6000602084013e612633565b606091505b509150915081158061264757508051602014155b80612663575061265e81600063ffffffff6134a616565b600114155b156127b1576040516060907f081812fc000000000000000000000000000000000000000000000000000000009061269e908790602401615731565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050856001600160a01b0316816040516127159190614f95565b600060405180830381855afa9150503d8060008114612750576040519150601f19603f3d011682016040523d82523d6000602084013e612755565b606091505b509093509150828015612769575081516020145b801561279857506002546001600160a01b031661278d83600c63ffffffff61347316565b6001600160a01b0316145b6127a35760006127a6565b60015b60ff16975050611bba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505050505050611dcc565b6001600160e01b031981167fa7cb5fb700000000000000000000000000000000000000000000000000000000141561298657600061281b84611ec4565b5050600354604051929450606093507fe985e9c50000000000000000000000000000000000000000000000000000000092612865925089916001600160a01b031690602401614fc5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b0316836040516128e09190614f95565b600060405180830381855afa9150503d806000811461291b576040519150601f19603f3d011682016040523d82523d6000602084013e612920565b606091505b5091509150818015612933575080516020145b801561294f575061294b81600063ffffffff6134a616565b6001145b61295a57600061183b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff955050505050611dcc565b6001600160e01b031981167fc339d10a000000000000000000000000000000000000000000000000000000001415611dcc57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b60006129eb613d23565b612a7c8584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a3e57600080fd5b505afa158015612a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a769190810190614bef565b3a6138b9565b60408051600480825260a0820190925291925060609190816020015b6060815260200190600190039081612a9857505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a0820190925292935060609291506020820160808038833901905050905088610160015184600081518110612b2e57fe5b60200260200101819052508783600081518110612b4757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886000015182600081518110612b7957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508681600081518110612ba757fe5b60200260200101818152505088610140015184600181518110612bc657fe5b6020026020010181905250886000015183600181518110612be357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508782600181518110612c1157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612c4357fe5b602002602001018181525050886101a0015184600281518110612c6257fe5b60200260200101819052508783600281518110612c7b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612cad57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612cdf57fe5b60200260200101818152505088610180015184600381518110612cfe57fe5b6020026020010181905250886000015183600381518110612d1b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612d4d57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846040015181600381518110612d7f57fe5b60209081029190910101526040516060907fb04fbddd0000000000000000000000000000000000000000000000000000000090612dc69087908790879087906024016150a2565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260055491519092506060916001600160a01b031690612e2d908490614f95565b6000604051808303816000865af19150503d8060008114612e6a576040519150601f19603f3d011682016040523d82523d6000602084013e612e6f565b606091505b50915060009050612e86828263ffffffff61343f16565b9050612e90613534565b6001600160e01b031982811691161415612ed2576000612eaf836108d9565b5091505060ff81166004811115612ec257fe5b99505050505050505050506120a5565b612eda6134ec565b6001600160e01b031982811691161415612f0d576000612ef983610850565b509091505060ff81166004811115612ec257fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce01415612f4c576004985050505050505050506120a5565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610774906155c2565b6040516060907f94cfcdd700000000000000000000000000000000000000000000000000000000906120e49085908590602401615205565b606080606060008551905080604051908082528060200260200182016040528015612ffb57816020015b612fe8613d52565b815260200190600190039081612fe05790505b50935080604051908082528060200260200182016040528015613028578160200160208202803883390190505b50925080604051908082528060200260200182016040528015613055578160200160208202803883390190505b50915060005b8181146130e55761309287828151811061307157fe5b602002602001015187838151811061308557fe5b6020026020010151613107565b87518890859081106130a057fe5b602002602001018785815181106130b357fe5b602002602001018786815181106130c657fe5b931515602094850291909101909301929092529190525260010161305b565b50509250925092565b6060806130fb8484612330565b91506107c284846109cc565b61310f613d52565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b9906131599088906004016156f9565b60606040518083038186803b15801561317157600080fd5b505afa158015613185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131a99190810190614a10565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f906131fb908990899060040161570c565b60206040518083038186803b15801561321357600080fd5b505afa158015613227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061324b919081019061486e565b9150600061325e82886101400151610828565b60a088015160c08901516101808a01516101408b01519394509192909160009161328d9163ffffffff61393016565b156132ba576132b3846132ad848d6080015161395590919063ffffffff16565b85613971565b9050613313565b816132ce576132b3848b6080015185613971565b60006132df868c6101800151610828565b905060006132f2868d6080015187613971565b90506000613301838688613971565b905061330d82826134d6565b93505050505b61333361332d89604001518561399b90919063ffffffff16565b826134d6565b965050505050509250925092565b6000806000613352846106ae6139ba565b600061336b60048651876133fc9092919063ffffffff16565b8060200190516108089190810190614c34565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b60006133af83600061343f565b90506001600160e01b0319808216908316146133f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077490615667565b505050565b60608183111561341a5761341a613415600085856139de565b613a4d565b83518211156134335761343361341560018487516139de565b50819003910190815290565b600081600401835110156134605761346061341560038551856004016139de565b5001602001516001600160e01b03191690565b600081601401835110156134945761349461341560048551856014016139de565b5001601401516001600160a01b031690565b60006120a58383613a55565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106134e557816120a5565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b6060818311156135dd576135dd613415600085856139de565b83518211156135f6576135f661341560018487516139de565b8282036040519080825280601f01601f191660200182016040528015613623576020820181803883390190505b5090506120a561363282613a7f565b8461363c87613a7f565b018351613a85565b606080606061366060048551866135c49092919063ffffffff16565b80602001905161088a9190810190614715565b60408051600180825281830190925260609182918291816020015b613696613c90565b81526020019060019003908161368e5750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b60608152602001906001900390816136df575050845190915061370c90859060049063ffffffff6135c416565b80602001905161371f9190810190614b9c565b8560008151811061372c57fe5b602002602001018560008151811061374057fe5b602002602001018560008151811061375457fe5b6020908102919091010192909252919052529193909250565b6040805160018082528183019092526060918291829160208083019080388339505085519193506137a99186915060049063ffffffff6135c416565b8060200190516137bc919081019061478f565b845185906000906137c957fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b6138c1613d23565b6020810184905260a085015160808601516138dd918691613b2a565b815260a085015160c08601516138f4918691613b2a565b604082015260a085015160e086015161390e918691613b2a565b6060820152613923828463ffffffff613b5e16565b6080820152949350505050565b6000815183511480156120a55750508051602091820120825192909101919091201490565b6000828201838110156120a5576120a561341560008686613b8b565b600061399383613987868563ffffffff613b5e16565b9063ffffffff613baa16565b949350505050565b6000828211156139b4576139b461341560028585613b8b565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b8484846040516024016139fd939291906154cf565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915290509392505050565b805160208201fd5b60008160200183511015613a7657613a7661341560058551856020016139de565b50016020015190565b60200190565b6020811015613aaf576001816020036101000a0380198351168185511680821786525050506133f7565b82821415613abc576133f7565b82821115613af65760208103905080820181840181515b82851015613aee578451865260209586019590940193613ad3565b9052506133f7565b60208103905080820181840183515b81861215613b215782518252601f199283019290910190613b05565b85525050505050565b6000613b37848484613bd4565b15613b4a57613b4a613415858585613c3a565b61399383613987868563ffffffff613b5e16565b600082613b6d5750600061084a565b82820282848281613b7a57fe5b04146120a5576120a5613415600186865b606063e946c1bb60e01b8484846040516024016139fd93929190615460565b600081613bc057613bc061341560038585613b8b565b6000828481613bcb57fe5b04949350505050565b600082613be657613be6613415613c59565b811580613bf1575083155b15613bfe575060006120a5565b60008380613c0857fe5b8584099050613c1d858463ffffffff613b5e16565b613c2f826103e863ffffffff613b5e16565b101595945050505050565b606063339f3de260e01b8484846040516024016139fd9392919061573a565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561084a81615816565b805161084a81615816565b600082601f830112613d98578081fd5b8135613dab613da682615777565b615750565b818152915060208083019084810181840286018201871015613dcc57600080fd5b60005b84811015611dc7578135613de281615816565b84529282019290820190600101613dcf565b600082601f830112613e04578081fd5b8151613e12613da682615777565b8181529150602080830190840160005b83811015613e4f57613e3a8760208451890101614074565b83526020928301929190910190600101613e22565b5050505092915050565b600082601f830112613e69578081fd5b8135613e77613da682615777565b8181529150602080830190840160005b83811015613e4f57613e9f8760208435890101614026565b83526020928301929190910190600101613e87565b600082601f830112613ec4578081fd5b8151613ed2613da682615777565b8181529150602080830190840160005b83811015613e4f57613efa8760208451890101614209565b83526020928301929190910190600101613ee2565b600082601f830112613f1f578081fd5b8135613f2d613da682615777565b8181529150602080830190840160005b83811015613e4f57613f5587602084358901016140ba565b83526020928301929190910190600101613f3d565b600082601f830112613f7a578081fd5b8151613f88613da682615777565b818152915060208083019084810181840286018201871015613fa957600080fd5b60005b84811015611dc757815184529282019290820190600101613fac565b600082601f830112613fd8578081fd5b8135613fe6613da682615777565b81815291506020808301908481018184028601820187101561400757600080fd5b60005b84811015611dc75781358452928201929082019060010161400a565b600082601f830112614036578081fd5b8135614044613da682615797565b915080825283602082850101111561405b57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112614084578081fd5b8151614092613da682615797565b91508082528360208285010111156140a957600080fd5b611dcc8160208401602086016157bb565b60006101c08083850312156140cd578182fd5b6140d681615750565b9150506140e38383613d72565b81526140f28360208401613d72565b60208201526141048360408401613d72565b60408201526141168360608401613d72565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8082111561417857600080fd5b61418486838701614026565b838501526101609250828501359150808211156141a057600080fd5b6141ac86838701614026565b838501526101809250828501359150808211156141c857600080fd5b6141d486838701614026565b838501526101a09250828501359150808211156141f057600080fd5b506141fd85828601614026565b82840152505092915050565b60006101c080838503121561421c578182fd5b61422581615750565b9150506142328383613d7d565b81526142418360208401613d7d565b60208201526142538360408401613d7d565b60408201526142658360608401613d7d565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff808211156142c757600080fd5b6142d386838701614074565b838501526101609250828501519150808211156142ef57600080fd5b6142fb86838701614074565b8385015261018092508285015191508082111561431757600080fd5b61432386838701614074565b838501526101a092508285015191508082111561433f57600080fd5b506141fd85828601614074565b805160ff8116811461084a57600080fd5b60006020828403121561436e578081fd5b81356120a581615816565b6000806040838503121561438b578081fd5b825161439681615816565b60208401519092506143a781615816565b809150509250929050565b6000806000606084860312156143c6578081fd5b83516143d181615816565b60208501519093506143e281615816565b80925050604084015190509250925092565b60008060008060808587031215614409578182fd5b845161441481615816565b602086015190945067ffffffffffffffff80821115614431578384fd5b61443d88838901614074565b94506040870151915080821115614452578384fd5b61445e88838901614074565b93506060870151915080821115614473578283fd5b5061448087828801614074565b91505092959194509250565b6000806040838503121561449e578182fd5b82356144a981615816565b9150602083013567ffffffffffffffff8111156144c4578182fd5b6144d085828601613e59565b9150509250929050565b600080600080608085870312156144ef578182fd5b84356144fa81615816565b9350602085013567ffffffffffffffff80821115614516578384fd5b61452288838901613fc8565b94506040870135915080821115614537578384fd5b61454388838901613fc8565b93506060870135915080821115614558578283fd5b5061448087828801614026565b60008060408385031215614577578182fd5b823561458281615816565b9150602083013567ffffffffffffffff81111561459d578182fd5b6144d085828601614026565b600080604083850312156145bb578182fd5b82356145c681615816565b946020939093013593505050565b6000602082840312156145e5578081fd5b813567ffffffffffffffff8111156145fb578182fd5b61399384828501613d88565b600060208284031215614618578081fd5b815167ffffffffffffffff81111561462e578182fd5b61399384828501613eb4565b60008060006060848603121561464e578081fd5b833567ffffffffffffffff80821115614665578283fd5b61467187838801613f0f565b94506020860135915080821115614686578283fd5b61469287838801613d88565b935060408601359150808211156146a7578283fd5b506146b486828701613fc8565b9150509250925092565b600080604083850312156146d0578182fd5b823567ffffffffffffffff808211156146e7578384fd5b6146f386838701613f0f565b93506020850135915080821115614708578283fd5b506144d085828601613e59565b600080600060608486031215614729578081fd5b835167ffffffffffffffff80821115614740578283fd5b61474c87838801613eb4565b94506020860151915080821115614761578283fd5b61476d87838801613f6a565b93506040860151915080821115614782578283fd5b506146b486828701613df4565b6000806000606084860312156147a3578081fd5b835167ffffffffffffffff808211156147ba578283fd5b6147c687838801613eb4565b9450602086015193506040860151915080821115614782578283fd5b600080604083850312156147f4578182fd5b823567ffffffffffffffff8082111561480b578384fd5b6146f386838701613fc8565b60008060408385031215614829578182fd5b825167ffffffffffffffff80821115614840578384fd5b61484c86838701613f6a565b93506020850151915080821115614861578283fd5b506144d085828601613df4565b60006020828403121561487f578081fd5b815180151581146120a5578182fd5b600080600080608085870312156148a3578182fd5b8451935060208501516148b581615816565b604086015190935067ffffffffffffffff80821115614452578384fd5b600080604083850312156148e4578182fd5b505080516020909101519092909150565b60008060408385031215614907578182fd5b82519150602083015167ffffffffffffffff811115614924578182fd5b6144d085828601614074565b600080600060608486031215614944578081fd5b83519250602084015167ffffffffffffffff80821115614962578283fd5b61496e87838801614074565b93506040860151915080821115614983578283fd5b506146b486828701614074565b600080604083850312156149a2578182fd5b8251915060208301516143a78161582b565b600080604083850312156149c6578182fd5b82516001600160e01b031981168114614396578283fd5b6000602082840312156149ee578081fd5b813567ffffffffffffffff811115614a04578182fd5b61399384828501614026565b60006060828403128015614a22578182fd5b8015614a2c578182fd5b50614a376060615750565b8251614a428161582b565b8152602083810151908201526040928301519281019290925250919050565b600060208284031215614a72578081fd5b815167ffffffffffffffff811115614a88578182fd5b61399384828501614209565b600080600060608486031215614aa8578081fd5b833567ffffffffffffffff811115614abe578182fd5b614aca868287016140ba565b9350506020840135614adb81615816565b929592945050506040919091013590565b60008060408385031215614afe578182fd5b823567ffffffffffffffff80821115614b15578384fd5b614b21868387016140ba565b93506020850135915080821115614b36578283fd5b506144d085828601614026565b60008060008060808587031215614b58578182fd5b845167ffffffffffffffff80821115614b6f578384fd5b614b7b88838901614209565b95506020870151915080821115614b90578384fd5b61443d88838901614209565b600080600060608486031215614bb0578081fd5b835167ffffffffffffffff80821115614bc7578283fd5b614bd387838801614209565b9450602086015193506040860151915080821115614983578283fd5b600060208284031215614c00578081fd5b5051919050565b60008060408385031215614c19578182fd5b8251614c248161582b565b6020939093015192949293505050565b600080600060608486031215614c48578081fd5b8351614c538161582b565b602085015160408601519194509250614c6b81615816565b809150509250925092565b60008060008060808587031215614c8b578182fd5b614c95868661434c565b9350602085015192506040850151614cac81615816565b606086015190925067ffffffffffffffff811115614cc8578182fd5b61448087828801614074565b600080600060608486031215614ce8578081fd5b614cf2858561434c565b925060208401519150604084015167ffffffffffffffff811115614d14578182fd5b6146b486828701614074565b600080600060608486031215614d34578081fd5b614d3e858561434c565b925060208401519150604084015190509250925092565b1515815260200190565b6000614d6b8383614e78565b505060600190565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614dba5781516001600160a01b0316865260209586019590910190600101614d93565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614e0f578284038852614df9848351614e4c565b6020988901989094509190910190600101614de1565b50919695505050505050565b6000815180845260208401935060208301825b82811015614dba578151865260209586019590910190600101614e2e565b60008151808452614e648160208601602086016157bb565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614ea4848451614d73565b6020830151614eb66020860182614d73565b506040830151614ec96040860182614d73565b506060830151614edc6060860182614d73565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152614f3583870182614e4c565b91505061016091508184015185820383870152614f528282614e4c565b925050506101808084015185830382870152614f6e8382614e4c565b9150506101a091508184015185820383870152614f8b8282614e4c565b9695505050505050565b60008251614fa78184602087016157bb565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b0386168252608060208301526150256080830186614e1b565b82810360408401526150378186614e1b565b83810360608501526150498186614e4c565b98975050505050505050565b60006001600160a01b0386168252608060208301526150776080830186614e4c565b82810360408401526150378186614e4c565b6001600160a01b03929092168252602082015260400190565b6000608082526150b56080830187614dc4565b82810360208401526150c78187614d80565b83810360408501526150d98187614d80565b91505082810360608401526150ee8185614e1b565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561513b5783516005811061512757fe5b835260209384019390920191600101615113565b509095945050505050565b6000606082016060835280865161515d8184615731565b9150602088019250835b8181101561518b5761517a838551614d5f565b602094909401939250600101615167565b5050838103602085015261519f8187614e1b565b91505082810360408401528084516151b78184615731565b9150602086019250835b818110156151e5576151d4838551614d55565b6020949094019392506001016151c1565b5090979650505050505050565b6000602082526120a56020830184614e1b565b6000604082526152186040830185614e1b565b828103602084015261522a8185614dc4565b95945050505050565b6000604082526152466040830185614e1b565b828103602084015261522a8185614e1b565b60008582526001600160a01b0385166020830152608060408301526152806080830185614e4c565b82810360608401526150ee8185614e4c565b918252602082015260400190565b6000838252604060208301526139936040830184614e4c565b6000848252606060208301526152d26060830185614e4c565b8281036040840152614f8b8185614e4c565b828152604081016152f48361580c565b8260208301529392505050565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a0604083015261535660a0830186614e1b565b82810360608401526153688186614e1b565b838103608085015261537a8186614e4c565b9998505050505050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b031985168252606060208301526153d56060830185614e1b565b8281036040840152614f8b8185614dc4565b6000602082526120a56020830184614e4c565b60006080825261540d6080830187614e4c565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b6000615443856157eb565b8482528360208301526060604083015261522a6060830184614e4c565b6060810161546d856157f8565b938152602081019290925260409091015290565b6060810161548e85615802565b93815260208101929092526001600160a01b031660409091015290565b604081016154b8846157f8565b9281526020015290565b6060810161546d85615802565b606081016008851061546d57fe5b60208101600583106154eb57fe5b91905290565b60006154fc8661580c565b8582528460208301526001600160a01b038416604083015260806060830152614f8b6080830184614e4c565b604081016154b8846157eb565b6000608082526155486080830187614e4c565b602083820381850152818751808452828401915082838202850101838a01865b8381101561559657601f19878403018552615584838351614e94565b94860194925090850190600101615568565b505086810360408801526155aa818a614e1b565b94505050505082810360608401526150ee8185614dc4565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a081016156e38286614e78565b8360608301528215156080830152949350505050565b6000602082526120a56020830184614e94565b60006040825261571f6040830185614e94565b828103602084015261522a8185614e4c565b90815260200190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561576f57600080fd5b604052919050565b600067ffffffffffffffff82111561578d578081fd5b5060209081020190565b600067ffffffffffffffff8211156157ad578081fd5b50601f01601f191660200190565b60005b838110156157d65781810151838201526020016157be565b838111156157e5576000848401525b50505050565b600281106157f557fe5b50565b600481106157f557fe5b600381106157f557fe5b600781106157f557fe5b6001600160a01b03811681146157f557600080fd5b60ff811681146157f557600080fdfea365627a7a723158200ea049525ebc74d73f3bf7858c601bd21168267b0dfb4abbdb7787cfd7233a2c6c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80639a7e75261161017b578063cafd3a07116100d8578063d46950281161008c578063e4e6e7da11610071578063e4e6e7da14610711578063e77286eb14610732578063ee4f5a9414610754576102c8565b8063d4695028146106cf578063e25cabf7146106ef576102c8565b8063d186037f116100bd578063d186037f14610689578063d36379051461069c578063d3d862d1146106bc576102c8565b8063cafd3a0714610655578063d001c5dc14610676576102c8565b8063acaedc741161012f578063bbb2dcf611610114578063bbb2dcf6146105ef578063bc03f96414610611578063ca49f47c14610632576102c8565b8063acaedc74146105b9578063b43cffe1146105dc576102c8565b8063a0901e5111610160578063a0901e5114610573578063a5cd62ba14610586578063a6627e9f146105a6576102c8565b80639a7e75261461052c5780639eadc8351461054f576102c8565b806346eb65cb116102295780636f83188e116101dd5780637b66ad34116101c25780637b66ad34146104e55780637d727512146105065780638f4ce47914610519576102c8565b80636f83188e146104a15780637914b2ec146104c4576102c8565b8063590aa8751161020e578063590aa8751461044c57806363eb39921461046c578063651290421461047f576102c8565b806346eb65cb146104175780634dfdac201461042c576102c8565b8063314853ff1161028057806332aae3ad1161026557806332aae3ad146103b15780633db6dc61146103d3578063459be5e2146103f6576102c8565b8063314853ff1461037c578063327d30541461039e576102c8565b80630d7b7d76116102b15780630d7b7d7614610319578063165979e11461033a5780632322cf761461035c576102c8565b806302d0aec3146102cd57806304a5618a146102f7575b600080fd5b6102e06102db366004614f2d565b610776565b6040516102ee929190615836565b60405180910390f35b61030a610305366004614f2d565b6107d2565b6040516102ee93929190615931565b61032c610327366004614a5e565b610880565b6040516102ee9291906157e4565b61034d610348366004614f2d565b6108a2565b6040516102ee93929190615a6e565b61036f61036a366004614a5e565b6108ff565b6040516102ee9190615cdc565b61038f61038a366004614f2d565b610927565b6040516102ee9392919061580b565b61032c6103ac366004614f2d565b61096e565b6103c46103bf366004614f2d565b6109b0565b6040516102ee939291906159e2565b6103e66103e1366004614f2d565b610a03565b6040516102ee94939291906157aa565b610409610404366004614f2d565b610a4d565b6040516102ee929190615a56565b61042a610425366004614f2d565b610aa3565b005b61043f61043a366004614985565b610c36565b6040516102ee9190615744565b61045f61045a3660046147fe565b610cb9565b6040516102ee9190615991565b61045f61047a366004614aa2565b610d3d565b61049261048d366004614f2d565b610dc8565b6040516102ee93929190615511565b6104b46104af366004614f2d565b610e02565b6040516102ee9493929190615ae0565b6104d76104d2366004614f2d565b611943565b6040516102ee929190615868565b6104f86104f3366004614f2d565b61197b565b6040516102ee9291906154f7565b61036f610514366004614a5e565b6119b3565b6104d7610527366004614f2d565b6120c8565b61053f61053a366004614f2d565b612158565b6040516102ee9493929190615a9c565b61056261055d366004614f2d565b6121b9565b6040516102ee95949392919061588b565b61043f610581366004614b24565b612264565b610599610594366004614b8a565b6122dd565b6040516102ee919061565d565b61045f6105b4366004614af9565b6123a0565b6105cc6105c7366004614f2d565b612427565b6040516102ee94939291906155b9565b61045f6105ea3660046149d3565b612463565b6106026105fd366004614f2d565b6124f0565b6040516102ee9392919061595c565b61062461061f366004614f2d565b61259d565b6040516102ee9291906157f2565b610645610640366004614f2d565b6125d6565b6040516102ee94939291906158ee565b610668610663366004614f2d565b612687565b6040516102ee929190615ad3565b61043f610684366004614985565b6126d5565b61036f610697366004614a5e565b612743565b6106af6106aa366004614fe4565b612d86565b6040516102ee9190615a89565b61045f6106ca366004614d32565b613323565b6106e26106dd366004614f2d565b61335b565b6040516102ee9190615853565b6107026106fd366004614c0e565b6134a7565b6040516102ee939291906156a9565b61072461071f366004614985565b6135df565b6040516102ee929190615785565b61074561074036600461503c565b6135f8565b6040516102ee93929190615c80565b610767610762366004614f2d565b613832565b6040516102ee93929190615a2c565b60008061078a8361078561386f565b613893565b60006107a360048551866138ed9092919063ffffffff16565b8060200190516107b69190810190614ee0565b909350905060ff811660068111156107ca57fe5b915050915091565b600080806107e6848263ffffffff61393016565b92506001600160e01b031983167f025717920000000000000000000000000000000000000000000000000000000014610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b60405180910390fd5b61086584601063ffffffff61396416565b915061087884602463ffffffff61399716565b929491935050565b60008061088d84846119b3565b91506108998484612743565b90509250929050565b60008060006108b3846107856139a3565b60006108cc60048651876138ed9092919063ffffffff16565b8060200190516108df9190810190615270565b9094509250905060ff811660028111156108f557fe5b9350509193909250565b600080600061090e8585610880565b9150915061091c82826139c7565b925050505b92915050565b6000606080610938846107856139dd565b835161094e90859060049063ffffffff6138ed16565b8060200190516109619190810190614e80565b9196909550909350915050565b60008061097d83610785613a01565b825161099390849060049063ffffffff6138ed16565b8060200190516109a69190810190614e22565b9094909350915050565b60008060606109c184610785613a25565b60006109da60048651876138ed9092919063ffffffff16565b8060200190516109ed9190810190615224565b9094509250905060ff811660018111156108f557fe5b600080606080610a1585610785613a49565b8451610a2b90869060049063ffffffff6138ed16565b806020019051610a3e9190810190614dde565b92989197509550909350915050565b600080610a5c83610785613a6d565b6000610a7560048551866138ed9092919063ffffffff16565b806020019051610a889190810190615157565b9250905060ff81166003811115610a9b57fe5b925050915091565b6000610ab5828263ffffffff61393016565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415610af957610af2826120c8565b5050610c32565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415610b3c57610b34826107d2565b505050610c32565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415610b8157610b77826121b9565b5050505050610c32565b6001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415610bbc57610b34826124f0565b6001600160e01b031981167fc339d10a000000000000000000000000000000000000000000000000000000001415610c0057610bf7826125d6565b50505050610c32565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b5050565b606060008251905080604051908082528060200260200182016040528015610c68578160200160208202803883390190505b50915060005b818114610cb157610c9285858381518110610c8557fe5b6020026020010151612743565b838281518110610c9e57fe5b6020908102919091010152600101610c6e565b505092915050565b6040516060907ff47261b00000000000000000000000000000000000000000000000000000000090610cef9084906024016154e3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050919050565b6040516060907fc339d10a0000000000000000000000000000000000000000000000000000000090610d7790869086908690602401615587565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915290505b9392505050565b6000806000610dd984610785613a91565b8351610def90859060049063ffffffff6138ed16565b8060200190516109619190810190614853565b60608080806000610e19868263ffffffff61393016565b90506001600160e01b031981167fdedfc1f1000000000000000000000000000000000000000000000000000000001415610e8a576040518060400160405280601181526020017f626174636843616e63656c4f72646572730000000000000000000000000000008152509450611419565b6001600160e01b031981167f9694a402000000000000000000000000000000000000000000000000000000001415610ef9576040518060400160405280600f81526020017f626174636846696c6c4f726465727300000000000000000000000000000000008152509450611419565b6001600160e01b031981167f8ea8dfe4000000000000000000000000000000000000000000000000000000001415610f68576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f77000000000000000000008152509450611419565b6001600160e01b031981167fbeee2e14000000000000000000000000000000000000000000000000000000001415610fd7576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f726465727300000000000000000000008152509450611419565b6001600160e01b031981167f2da62987000000000000000000000000000000000000000000000000000000001415611046576040518060400160405280600b81526020017f63616e63656c4f726465720000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167f9b44d5560000000000000000000000000000000000000000000000000000000014156110b5576040518060400160405280600981526020017f66696c6c4f7264657200000000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167fe14b58c4000000000000000000000000000000000000000000000000000000001415611124576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f7264657200000000000000000000000000000000008152509450611419565b6001600160e01b031981167f78d29ac1000000000000000000000000000000000000000000000000000000001415611193576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f77000000000000000000008152509450611419565b6001600160e01b031981167f369da099000000000000000000000000000000000000000000000000000000001415611202576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f770000000000000000008152509450611419565b6001600160e01b031981167f8bc8efb3000000000000000000000000000000000000000000000000000000001415611271576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c000000000000008152509450611419565b6001600160e01b031981167fa6c3bf330000000000000000000000000000000000000000000000000000000014156112e0576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c0000000000008152509450611419565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561134f576040518060400160405280600b81526020017f6d617463684f72646572730000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806113b057506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156113e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615bdb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615ba4565b6001600160e01b031981167fdedfc1f10000000000000000000000000000000000000000000000000000000014156114be57855161146190879060049063ffffffff613ab516565b8060200190516114749190810190614b57565b604080516000808252602082019092529195505b50604080516000808252602082019092529194506114b6565b60608152602001906001900390816114a15790505b50915061193b565b6001600160e01b031981167fbeee2e1400000000000000000000000000000000000000000000000000000000148061151f57506001600160e01b031981167f9694a40200000000000000000000000000000000000000000000000000000000145b8061155357506001600160e01b031981167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b1561156d5761156186613b35565b9195509350915061193b565b6001600160e01b031981167f2da629870000000000000000000000000000000000000000000000000000000014156116555760408051600180825281830190925290816020015b6115bc614131565b8152602001906001900390816115b457505086519094506115e790879060049063ffffffff613ab516565b8060200190516115fa9190810190614fb1565b8460008151811061160757fe5b602002602001018190525060006040519080825280602002602001820160405280156114885781602001602082028038833901905050604080516000808252602082019092529194506114b6565b6001600160e01b031981167fe14b58c40000000000000000000000000000000000000000000000000000000014806116b657506001600160e01b031981167f9b44d55600000000000000000000000000000000000000000000000000000000145b156116c45761156186613b64565b6001600160e01b031981167f78d29ac100000000000000000000000000000000000000000000000000000000148061172557506001600160e01b031981167f369da09900000000000000000000000000000000000000000000000000000000145b8061175957506001600160e01b031981167f8bc8efb300000000000000000000000000000000000000000000000000000000145b8061178d57506001600160e01b031981167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561179b5761156186613c5e565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561193b576117d5614131565b6117dd614131565b6060806117f760048b518c613ab59092919063ffffffff16565b80602001905161180a9190810190615093565b604080516002808252606082019092529498509296509094509250816020015b611832614131565b81526020019060019003908161182a579050509750838860008151811061185557fe5b6020026020010181905250828860018151811061186e57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a00151876000815181106118ae57fe5b6020026020010181815250508260a00151876001815181106118cc57fe5b60209081029190910101526040805160028082526060820190925290816020015b60608152602001906001900390816118ed579050509550818660008151811061191257fe5b6020026020010181905250808660018151811061192b57fe5b6020026020010181905250505050505b509193509193565b60008061195283610785613cd2565b825161196890849060049063ffffffff6138ed16565b8060200190516109a69190810190614f04565b60008061198a83610785613cf6565b82516119a090849060049063ffffffff6138ed16565b8060200190516109a6919081019061481a565b6000806119c6838263ffffffff61393016565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415611b3b576000611a0d84601063ffffffff61396416565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611a469088906024016154e3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b031683604051611ac191906154c7565b600060405180830381855afa9150503d8060008114611afc576040519150601f19603f3d011682016040523d82523d6000602084013e611b01565b606091505b5091509150818015611b14575080516020145b611b1f576000611b30565b611b3081600063ffffffff61399716565b9550505050506120c1565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415611cd657600080611b79856107d2565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611bb5908490602401615cdc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b031683604051611c3091906154c7565b600060405180830381855afa9150503d8060008114611c6b576040519150601f19603f3d011682016040523d82523d6000602084013e611c70565b606091505b50915091506000828015611c85575081516020145b611c90576000611ca1565b611ca182600c63ffffffff61396416565b9050896001600160a01b0316816001600160a01b031614611cc3576000611cc6565b60015b60ff1697505050505050506120c1565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415611eb9576000606080611d16866121b9565b5081519296509094509250905060005b818114611eaf5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b90879085908110611d6157fe5b6020026020010151604051602401611d7a9291906155ed565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060876001600160a01b031683604051611df591906154c7565b600060405180830381855afa9150503d8060008114611e30576040519150601f19603f3d011682016040523d82523d6000602084013e611e35565b606091505b50915091506000828015611e4a575081516020145b611e55576000611e66565b611e6682600063ffffffff61399716565b90506000878681518110611e7657fe5b60200260200101518281611e8657fe5b0490508b811080611e9557508b155b15611e9e57809b505b505060019093019250611d26915050565b50505050506120c1565b6001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000141561200a576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611f28908690600090819081906024016159a4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611f8f9084906154c7565b600060405180830381855afa9150503d8060008114611fca576040519150601f19603f3d011682016040523d82523d6000602084013e611fcf565b606091505b5050905080611fdf576000612001565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b935050506120c1565b6001600160e01b031981167f94cfcdd70000000000000000000000000000000000000000000000000000000014156120c157606080612048856124f0565b80519194509250905060005b8181146120bc57600061207a8985848151811061206d57fe5b60200260200101516119b3565b9050600085838151811061208a57fe5b6020026020010151828161209a57fe5b049050878110806120a9575087155b156120b2578097505b5050600101612054565b505050505b5092915050565b6000806120db838263ffffffff61393016565b91506001600160e01b031982167ff47261b00000000000000000000000000000000000000000000000000000000014612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b61215183601063ffffffff61396416565b9050915091565b6000806000606061216b85610785613d1a565b600061218460048751886138ed9092919063ffffffff16565b80602001905161219791908101906151c6565b91965094509250905060ff811660068111156121af57fe5b9450509193509193565b600080606080806121d0868563ffffffff61393016565b94506001600160e01b031985167fa7cb5fb70000000000000000000000000000000000000000000000000000000014612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b6060808251604051908082528060200260200182016040528015612292578160200160208202803883390190505b50905060005b835181146120c1578381815181106122ac57fe5b60200260200101516001600160a01b0316318282815181106122ca57fe5b6020908102919091010152600101612298565b60606000845190508060405190808252806020026020018201604052801561230f578160200160208202803883390190505b50915060005b8181146123975761236086828151811061232b57fe5b602002602001015186838151811061233f57fe5b602002602001015186848151811061235357fe5b6020026020010151612d86565b83828151811061236c57fe5b6020026020010190600481111561237f57fe5b9081600481111561238c57fe5b905250600101612315565b50509392505050565b6040516060907f0257179200000000000000000000000000000000000000000000000000000000906123d890859085906024016155ed565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152905092915050565b6000606080606061243a85610785613d3e565b845161245090869060049063ffffffff6138ed16565b806020019051610a3e91908101906148ed565b6040516060907fa7cb5fb7000000000000000000000000000000000000000000000000000000009061249f908790879087908790602401615535565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050949350505050565b6000606080612505848463ffffffff61393016565b92506001600160e01b031983167f94cfcdd7000000000000000000000000000000000000000000000000000000001461256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b835161258090859060049063ffffffff613ab516565b8060200190516125939190810190614d67565b9395909450915050565b600060606125ad83610785613d62565b82516125c390849060049063ffffffff6138ed16565b8060200190516109a69190810190614e45565b6000806060816125ec858263ffffffff61393016565b93506001600160e01b031984167fc339d10a0000000000000000000000000000000000000000000000000000000014612651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b845161266790869060049063ffffffff613ab516565b80602001905161267a9190810190614895565b9597919650949350915050565b60008061269683610785613d86565b60006126af60048551866138ed9092919063ffffffff16565b8060200190516126c29190810190615157565b9250905060ff81166001811115610a9b57fe5b606060008251905080604051908082528060200260200182016040528015612707578160200160208202803883390190505b50915060005b818114610cb1576127248585838151811061206d57fe5b83828151811061273057fe5b602090810291909101015260010161270d565b600080612756838263ffffffff61393016565b90506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000141561280857606080612796856124f0565b80519194509250905060005b8181146127fd5760006127bb89858481518110610c8557fe5b905060008583815181106127cb57fe5b602002602001015182816127db57fe5b049050878110806127ea575087155b156127f3578097505b50506001016127a2565b506109219350505050565b6001600160e01b031981167ff47261b000000000000000000000000000000000000000000000000000000000141561289357600061284d84601063ffffffff61396416565b6001546040519192506060917fdd62ed3e0000000000000000000000000000000000000000000000000000000091611a469189916001600160a01b0316906024016154f7565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415612b83576000806128d1856107d2565b600254604051929550909350606092507fe985e9c5000000000000000000000000000000000000000000000000000000009161291d918a916001600160a01b03909116906024016154f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b03168360405161299891906154c7565b600060405180830381855afa9150503d80600081146129d3576040519150601f19603f3d011682016040523d82523d6000602084013e6129d8565b606091505b50915091508115806129ec57508051602014155b80612a085750612a0381600063ffffffff61399716565b600114155b15612b56576040516060907f081812fc0000000000000000000000000000000000000000000000000000000090612a43908790602401615cdc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050856001600160a01b031681604051612aba91906154c7565b600060405180830381855afa9150503d8060008114612af5576040519150601f19603f3d011682016040523d82523d6000602084013e612afa565b606091505b509093509150828015612b0e575081516020145b8015612b3d57506002546001600160a01b0316612b3283600c63ffffffff61396416565b6001600160a01b0316145b612b48576000612b4b565b60015b60ff16975050611eaf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965050505050506120c1565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415612d2b576000612bc0846121b9565b5050600354604051929450606093507fe985e9c50000000000000000000000000000000000000000000000000000000092612c0a925089916001600160a01b0316906024016154f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b031683604051612c8591906154c7565b600060405180830381855afa9150503d8060008114612cc0576040519150601f19603f3d011682016040523d82523d6000602084013e612cc5565b606091505b5091509150818015612cd8575080516020145b8015612cf45750612cf081600063ffffffff61399716565b6001145b612cff576000611b30565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550505050506120c1565b6001600160e01b031981167fc339d10a0000000000000000000000000000000000000000000000000000000014156120c157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b6000612d906141c4565b612e218584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612de357600080fd5b505afa158015612df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e1b919081019061513f565b3a613daa565b60408051600480825260a0820190925291925060609190816020015b6060815260200190600190039081612e3d57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a0820190925292935060609291506020820160808038833901905050905088610160015184600081518110612ed357fe5b60200260200101819052508783600081518110612eec57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886000015182600081518110612f1e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508681600081518110612f4c57fe5b60200260200101818152505088610140015184600181518110612f6b57fe5b6020026020010181905250886000015183600181518110612f8857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508782600181518110612fb657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612fe857fe5b602002602001018181525050886101a001518460028151811061300757fe5b6020026020010181905250878360028151811061302057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260028151811061305257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084606001518160028151811061308457fe5b602002602001018181525050886101800151846003815181106130a357fe5b60200260200101819052508860000151836003815181106130c057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860400151826003815181106130f257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061312457fe5b60209081029190910101526040516060907fb04fbddd000000000000000000000000000000000000000000000000000000009061316b908790879087908790602401615606565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260055491519092506060916001600160a01b0316906131d29084906154c7565b6000604051808303816000865af19150503d806000811461320f576040519150601f19603f3d011682016040523d82523d6000602084013e613214565b606091505b5091506000905061322b828263ffffffff61393016565b9050613235613a25565b6001600160e01b031982811691161415613277576000613254836109b0565b5091505060ff8116600481111561326757fe5b9950505050505050505050610dc1565b61327f6139dd565b6001600160e01b0319828116911614156132b257600061329e83610927565b509091505060ff8116600481111561326757fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce014156132f157600498505050505050505050610dc1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615b6d565b6040516060907f94cfcdd700000000000000000000000000000000000000000000000000000000906123d89085908590602401615757565b600061336d828263ffffffff61393016565b90506001600160e01b031981167ff47261b00000000000000000000000000000000000000000000000000000000014806133d057506001600160e01b031981167f0257179200000000000000000000000000000000000000000000000000000000145b8061340457506001600160e01b031981167fa7cb5fb700000000000000000000000000000000000000000000000000000000145b8061343857506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000145b8061346c57506001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000145b6134a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b919050565b6060806060600085519050806040519080825280602002602001820160405280156134ec57816020015b6134d96141f3565b8152602001906001900390816134d15790505b50935080604051908082528060200260200182016040528015613519578160200160208202803883390190505b50925080604051908082528060200260200182016040528015613546578160200160208202803883390190505b50915060005b8181146135d65761358387828151811061356257fe5b602002602001015187838151811061357657fe5b60200260200101516135f8565b875188908590811061359157fe5b602002602001018785815181106135a457fe5b602002602001018786815181106135b757fe5b931515602094850291909101909301929092529190525260010161354c565b50509250925092565b6060806135ec84846126d5565b91506108998484610c36565b6136006141f3565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b99061364a908890600401615ca4565b60606040518083038186803b15801561366257600080fd5b505afa158015613676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061369a9190810190614f60565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f906136ec9089908990600401615cb7565b60206040518083038186803b15801561370457600080fd5b505afa158015613718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061373c9190810190614dbe565b9150600061374f828861014001516108ff565b60a088015160c08901516101808a01516101408b01519394509192909160009161377e9163ffffffff613e2116565b156137ab576137a48461379e848d60800151613e4690919063ffffffff16565b85613e62565b9050613804565b816137bf576137a4848b6080015185613e62565b60006137d0868c61018001516108ff565b905060006137e3868d6080015187613e62565b905060006137f2838688613e62565b90506137fe82826139c7565b93505050505b61382461381e896040015185613e8c90919063ffffffff16565b826139c7565b965050505050509250925092565b600080600061384384610785613eab565b600061385c60048651876138ed9092919063ffffffff16565b8060200190516108df9190810190615184565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b60006138a0836000613930565b90506001600160e01b0319808216908316146138e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c12565b505050565b60608183111561390b5761390b61390660008585613ecf565b613eee565b8351821115613924576139246139066001848751613ecf565b50819003910190815290565b60008160040183511015613951576139516139066003855185600401613ecf565b5001602001516001600160e01b03191690565b60008160140183511015613985576139856139066004855185601401613ecf565b5001601401516001600160a01b031690565b6000610dc18383613ef6565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106139d65781610dc1565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b606081831115613ace57613ace61390660008585613ecf565b8351821115613ae757613ae76139066001848751613ecf565b8282036040519080825280601f01601f191660200182016040528015613b14576020820181803883390190505b509050610dc1613b2382613f20565b84613b2d87613f20565b018351613f26565b6060806060613b516004855186613ab59092919063ffffffff16565b8060200190516109619190810190614c65565b60408051600180825281830190925260609182918291816020015b613b87614131565b815260200190600190039081613b7f5750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613bd05750508451909150613bfd90859060049063ffffffff613ab516565b806020019051613c1091908101906150ec565b85600081518110613c1d57fe5b6020026020010185600081518110613c3157fe5b6020026020010185600081518110613c4557fe5b6020908102919091010192909252919052529193909250565b604080516001808252818301909252606091829182916020808301908038833950508551919350613c9a9186915060049063ffffffff613ab516565b806020019051613cad9190810190614cdf565b84518590600090613cba57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b613db26141c4565b6020810184905260a08501516080860151613dce918691613fcb565b815260a085015160c0860151613de5918691613fcb565b604082015260a085015160e0860151613dff918691613fcb565b6060820152613e14828463ffffffff613fff16565b6080820152949350505050565b600081518351148015610dc15750508051602091820120825192909101919091201490565b600082820183811015610dc157610dc16139066000868661402c565b6000613e8483613e78868563ffffffff613fff16565b9063ffffffff61404b16565b949350505050565b600082821115613ea557613ea56139066002858561402c565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610d7793929190615a7b565b805160208201fd5b60008160200183511015613f1757613f176139066005855185602001613ecf565b50016020015190565b60200190565b6020811015613f50576001816020036101000a0380198351168185511680821786525050506138e8565b82821415613f5d576138e8565b82821115613f975760208103905080820181840181515b82851015613f8f578451865260209586019590940193613f74565b9052506138e8565b60208103905080820181840183515b81861215613fc25782518252601f199283019290910190613fa6565b85525050505050565b6000613fd8848484614075565b15613feb57613feb6139068585856140db565b613e8483613e78868563ffffffff613fff16565b60008261400e57506000610921565b8282028284828161401b57fe5b0414610dc157610dc1613906600186865b606063e946c1bb60e01b848484604051602401610d7793929190615a0a565b600081614061576140616139066003858561402c565b600082848161406c57fe5b04949350505050565b600082614087576140876139066140fa565b811580614092575083155b1561409f57506000610dc1565b600083806140a957fe5b85840990506140be858463ffffffff613fff16565b6140d0826103e863ffffffff613fff16565b101595945050505050565b606063339f3de260e01b848484604051602401610d7793929190615ce5565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561092181615dc1565b805161092181615dc1565b600082601f830112614239578081fd5b813561424c61424782615d22565b615cfb565b81815291506020808301908481018184028601820187101561426d57600080fd5b60005b848110156120bc57813561428381615dc1565b84529282019290820190600101614270565b600082601f8301126142a5578081fd5b81516142b361424782615d22565b8181529150602080830190840160005b838110156142f0576142db8760208451890101614515565b835260209283019291909101906001016142c3565b5050505092915050565b600082601f83011261430a578081fd5b813561431861424782615d22565b8181529150602080830190840160005b838110156142f05761434087602084358901016144c7565b83526020928301929190910190600101614328565b600082601f830112614365578081fd5b815161437361424782615d22565b8181529150602080830190840160005b838110156142f05761439b87602084518901016146aa565b83526020928301929190910190600101614383565b600082601f8301126143c0578081fd5b81356143ce61424782615d22565b8181529150602080830190840160005b838110156142f0576143f6876020843589010161455b565b835260209283019291909101906001016143de565b600082601f83011261441b578081fd5b815161442961424782615d22565b81815291506020808301908481018184028601820187101561444a57600080fd5b60005b848110156120bc5781518452928201929082019060010161444d565b600082601f830112614479578081fd5b813561448761424782615d22565b8181529150602080830190848101818402860182018710156144a857600080fd5b60005b848110156120bc578135845292820192908201906001016144ab565b600082601f8301126144d7578081fd5b81356144e561424782615d42565b91508082528360208285010111156144fc57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112614525578081fd5b815161453361424782615d42565b915080825283602082850101111561454a57600080fd5b6120c1816020840160208601615d66565b60006101c080838503121561456e578182fd5b61457781615cfb565b9150506145848383614213565b81526145938360208401614213565b60208201526145a58360408401614213565b60408201526145b78360608401614213565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8082111561461957600080fd5b614625868387016144c7565b8385015261016092508285013591508082111561464157600080fd5b61464d868387016144c7565b8385015261018092508285013591508082111561466957600080fd5b614675868387016144c7565b838501526101a092508285013591508082111561469157600080fd5b5061469e858286016144c7565b82840152505092915050565b60006101c08083850312156146bd578182fd5b6146c681615cfb565b9150506146d3838361421e565b81526146e2836020840161421e565b60208201526146f4836040840161421e565b6040820152614706836060840161421e565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561476857600080fd5b61477486838701614515565b8385015261016092508285015191508082111561479057600080fd5b61479c86838701614515565b838501526101809250828501519150808211156147b857600080fd5b6147c486838701614515565b838501526101a09250828501519150808211156147e057600080fd5b5061469e85828601614515565b805160ff8116811461092157600080fd5b60006020828403121561480f578081fd5b8135610dc181615dc1565b6000806040838503121561482c578081fd5b825161483781615dc1565b602084015190925061484881615dc1565b809150509250929050565b600080600060608486031215614867578081fd5b835161487281615dc1565b602085015190935061488381615dc1565b80925050604084015190509250925092565b6000806000606084860312156148a9578081fd5b83516148b481615dc1565b602085015190935067ffffffffffffffff8111156148d0578182fd5b6148dc86828701614515565b925050604084015190509250925092565b60008060008060808587031215614902578182fd5b845161490d81615dc1565b602086015190945067ffffffffffffffff8082111561492a578384fd5b61493688838901614515565b9450604087015191508082111561494b578384fd5b61495788838901614515565b9350606087015191508082111561496c578283fd5b5061497987828801614515565b91505092959194509250565b60008060408385031215614997578182fd5b82356149a281615dc1565b9150602083013567ffffffffffffffff8111156149bd578182fd5b6149c9858286016142fa565b9150509250929050565b600080600080608085870312156149e8578182fd5b84356149f381615dc1565b9350602085013567ffffffffffffffff80821115614a0f578384fd5b614a1b88838901614469565b94506040870135915080821115614a30578384fd5b614a3c88838901614469565b93506060870135915080821115614a51578283fd5b50614979878288016144c7565b60008060408385031215614a70578182fd5b8235614a7b81615dc1565b9150602083013567ffffffffffffffff811115614a96578182fd5b6149c9858286016144c7565b600080600060608486031215614ab6578081fd5b8335614ac181615dc1565b9250602084013567ffffffffffffffff811115614adc578182fd5b614ae8868287016144c7565b925050604084013590509250925092565b60008060408385031215614b0b578182fd5b8235614b1681615dc1565b946020939093013593505050565b600060208284031215614b35578081fd5b813567ffffffffffffffff811115614b4b578182fd5b613e8484828501614229565b600060208284031215614b68578081fd5b815167ffffffffffffffff811115614b7e578182fd5b613e8484828501614355565b600080600060608486031215614b9e578081fd5b833567ffffffffffffffff80821115614bb5578283fd5b614bc1878388016143b0565b94506020860135915080821115614bd6578283fd5b614be287838801614229565b93506040860135915080821115614bf7578283fd5b50614c0486828701614469565b9150509250925092565b60008060408385031215614c20578182fd5b823567ffffffffffffffff80821115614c37578384fd5b614c43868387016143b0565b93506020850135915080821115614c58578283fd5b506149c9858286016142fa565b600080600060608486031215614c79578081fd5b835167ffffffffffffffff80821115614c90578283fd5b614c9c87838801614355565b94506020860151915080821115614cb1578283fd5b614cbd8783880161440b565b93506040860151915080821115614cd2578283fd5b50614c0486828701614295565b600080600060608486031215614cf3578081fd5b835167ffffffffffffffff80821115614d0a578283fd5b614d1687838801614355565b9450602086015193506040860151915080821115614cd2578283fd5b60008060408385031215614d44578182fd5b823567ffffffffffffffff80821115614d5b578384fd5b614c4386838701614469565b60008060408385031215614d79578182fd5b825167ffffffffffffffff80821115614d90578384fd5b614d9c8683870161440b565b93506020850151915080821115614db1578283fd5b506149c985828601614295565b600060208284031215614dcf578081fd5b81518015158114610dc1578182fd5b60008060008060808587031215614df3578182fd5b845193506020850151614e0581615dc1565b604086015190935067ffffffffffffffff8082111561494b578384fd5b60008060408385031215614e34578182fd5b505080516020909101519092909150565b60008060408385031215614e57578182fd5b82519150602083015167ffffffffffffffff811115614e74578182fd5b6149c985828601614515565b600080600060608486031215614e94578081fd5b83519250602084015167ffffffffffffffff80821115614eb2578283fd5b614ebe87838801614515565b93506040860151915080821115614ed3578283fd5b50614c0486828701614515565b60008060408385031215614ef2578182fd5b82519150602083015161484881615dd6565b60008060408385031215614f16578182fd5b82516001600160e01b031981168114614837578283fd5b600060208284031215614f3e578081fd5b813567ffffffffffffffff811115614f54578182fd5b613e84848285016144c7565b60006060828403128015614f72578182fd5b8015614f7c578182fd5b50614f876060615cfb565b614f9184846147ed565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614fc2578081fd5b815167ffffffffffffffff811115614fd8578182fd5b613e84848285016146aa565b600080600060608486031215614ff8578081fd5b833567ffffffffffffffff81111561500e578182fd5b61501a8682870161455b565b935050602084013561502b81615dc1565b929592945050506040919091013590565b6000806040838503121561504e578182fd5b823567ffffffffffffffff80821115615065578384fd5b6150718683870161455b565b93506020850135915080821115615086578283fd5b506149c9858286016144c7565b600080600080608085870312156150a8578182fd5b845167ffffffffffffffff808211156150bf578384fd5b6150cb888389016146aa565b955060208701519150808211156150e0578384fd5b614936888389016146aa565b600080600060608486031215615100578081fd5b835167ffffffffffffffff80821115615117578283fd5b615123878388016146aa565b9450602086015193506040860151915080821115614ed3578283fd5b600060208284031215615150578081fd5b5051919050565b60008060408385031215615169578182fd5b825161517481615dd6565b6020939093015192949293505050565b600080600060608486031215615198578081fd5b83516151a381615dd6565b6020850151604086015191945092506151bb81615dc1565b809150509250925092565b600080600080608085870312156151db578182fd5b6151e586866147ed565b93506020850151925060408501516151fc81615dc1565b606086015190925067ffffffffffffffff811115615218578182fd5b61497987828801614515565b600080600060608486031215615238578081fd5b61524285856147ed565b925060208401519150604084015167ffffffffffffffff811115615264578182fd5b614c0486828701614515565b600080600060608486031215615284578081fd5b61528e85856147ed565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b828110156152ec5781516001600160a01b03168652602095860195909101906001016152c5565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b8481101561534157828403885261532b84835161537e565b6020988901989094509190910190600101615313565b50919695505050505050565b6000815180845260208401935060208301825b828110156152ec578151865260209586019590910190600101615360565b60008151808452615396816020860160208601615d66565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c06153d68484516152a5565b60208301516153e860208601826152a5565b5060408301516153fb60408601826152a5565b50606083015161540e60608601826152a5565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015181860152506101408084015182828701526154678387018261537e565b91505061016091508184015185820383870152615484828261537e565b9250505061018080840151858303828701526154a0838261537e565b9150506101a0915081840151858203838701526154bd828261537e565b9695505050505050565b600082516154d9818460208701615d66565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b038616825260806020830152615557608083018661534d565b8281036040840152615569818661534d565b838103606085015261557b818661537e565b98975050505050505050565b60006001600160a01b0385168252606060208301526155a9606083018561537e565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526155db608083018661537e565b8281036040840152615569818661537e565b6001600160a01b03929092168252602082015260400190565b60006080825261561960808301876152f6565b828103602084015261562b81876152b2565b838103604085015261563d81876152b2565b9150508281036060840152615652818561534d565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561569e57835161568a81615db7565b835260209384019390920191600101615677565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b828110156156ec576156d98483516153aa565b60609390930192908401906001016156c6565b50505083810382850152615700818761534d565b84810360408601528551808252908301915082860190845b81811015615736578251151584529284019291840191600101615718565b509198975050505050505050565b600060208252610dc1602083018461534d565b60006040825261576a604083018561534d565b828103602084015261577c81856152f6565b95945050505050565b600060408252615798604083018561534d565b828103602084015261577c818561534d565b60008582526001600160a01b0385166020830152608060408301526157d2608083018561537e565b8281036060840152615652818561537e565b918252602082015260400190565b600083825260406020830152613e84604083018461537e565b600084825260606020830152615824606083018561537e565b82810360408401526154bd818561537e565b8281526040810161584683615dad565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a060408301526158bd60a083018661534d565b82810360608401526158cf818661534d565b83810360808501526158e1818661537e565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b038516602083015260806040830152615920608083018561537e565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b0319851682526060602083015261597f606083018561534d565b82810360408401526154bd81856152f6565b600060208252610dc1602083018461537e565b6000608082526159b7608083018761537e565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006159ed85615d96565b8482528360208301526060604083015261577c606083018461537e565b6060810160048510615a1857fe5b938152602081019290925260409091015290565b60608101615a3985615da3565b93815260208101929092526001600160a01b031660409091015290565b6040810160048410615a6457fe5b9281526020015290565b60608101615a1885615da3565b6060810160088510615a1857fe5b60208101615a9683615db7565b91905290565b6000615aa786615dad565b8582528460208301526001600160a01b0384166040830152608060608301526154bd608083018461537e565b60408101615a6484615d96565b600060808252615af3608083018761537e565b602083820381850152818751808452828401915082838202850101838a01865b83811015615b4157601f19878403018552615b2f8383516153c6565b94860194925090850190600101615b13565b50508681036040880152615b55818a61534d565b945050505050828103606084015261565281856152f6565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a08101615c8e82866153aa565b8360608301528215156080830152949350505050565b600060208252610dc160208301846153c6565b600060408252615cca60408301856153c6565b828103602084015261577c818561537e565b90815260200190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff81118282101715615d1a57600080fd5b604052919050565b600067ffffffffffffffff821115615d38578081fd5b5060209081020190565b600067ffffffffffffffff821115615d58578081fd5b50601f01601f191660200190565b60005b83811015615d81578181015183820152602001615d69565b83811115615d90576000848401525b50505050565b60028110615da057fe5b50565b60038110615da057fe5b60078110615da057fe5b60058110615da057fe5b6001600160a01b0381168114615da057600080fd5b60ff81168114615da057600080fdfea365627a7a723158209bd08114ba2e3dada6fb089e11dba7dc3bfedf454a0bac82e7a05d67b08360dd6c6578706572696d656e74616cf564736f6c634300050c0040" } } }, @@ -889,5 +955,5 @@ "evmVersion": "constantinople" } }, - "networks": {} + "chains": {} }