{
    "_format": "hh-sol-artifact-1",
    "contractName": "Controller",
    "sourceName": "contracts/vanilla/Controller.sol",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "isOperator",
                    "type": "bool"
                }
            ],
            "name": "AccountOperatorUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "CallExecuted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "isRestricted",
                    "type": "bool"
                }
            ],
            "name": "CallRestricted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "asset",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vaultId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "CollateralAssetDeposited",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "asset",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vaultId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "CollateralAssetWithdrawed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "donator",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "asset",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Donated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "oldFullPauser",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newFullPauser",
                    "type": "address"
                }
            ],
            "name": "FullPauserUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "vToken",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vaultId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "LongVTokenDeposited",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "vToken",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vaultId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "LongVTokenWithdrawed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "collateral",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "cap",
                    "type": "uint256"
                }
            ],
            "name": "NakedCapUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "oldPartialPauser",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newPartialPauser",
                    "type": "address"
                }
            ],
            "name": "PartialPauserUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "vToken",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "redeemer",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "collateral",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vTokenBurned",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "payout",
                    "type": "uint256"
                }
            ],
            "name": "Redeem",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "vToken",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vaultId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "ShortVTokenBurned",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "vToken",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vaultId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "ShortVTokenMinted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "isPaused",
                    "type": "bool"
                }
            ],
            "name": "SystemFullyPaused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "isPaused",
                    "type": "bool"
                }
            ],
            "name": "SystemPartiallyPaused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "liquidator",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "receiver",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "auctionPrice",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "payout",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "debtAmount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vaultId",
                    "type": "uint256"
                }
            ],
            "name": "VaultLiquidated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vaultId",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "vaultType",
                    "type": "uint256"
                }
            ],
            "name": "VaultOpened",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "vaultId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "payout",
                    "type": "uint256"
                }
            ],
            "name": "VaultSettled",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "addressbook",
            "outputs": [
                {
                    "internalType": "contract IAddressbook",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "calculator",
            "outputs": [
                {
                    "internalType": "contract IMarginCalculator",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "callRestricted",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_underlying",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_strike",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_collateral",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_expiry",
                    "type": "uint256"
                }
            ],
            "name": "canSettleAssets",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_asset",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_amount",
                    "type": "uint256"
                }
            ],
            "name": "donate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "fullPauser",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_owner",
                    "type": "address"
                }
            ],
            "name": "getAccountVaultCounter",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getConfiguration",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_asset",
                    "type": "address"
                }
            ],
            "name": "getNakedCap",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_asset",
                    "type": "address"
                }
            ],
            "name": "getNakedPoolBalance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_vToken",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_amount",
                    "type": "uint256"
                }
            ],
            "name": "getPayout",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_owner",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_vaultId",
                    "type": "uint256"
                }
            ],
            "name": "getProceed",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_owner",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_vaultId",
                    "type": "uint256"
                }
            ],
            "name": "getVault",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address[]",
                            "name": "shortVTokens",
                            "type": "address[]"
                        },
                        {
                            "internalType": "address[]",
                            "name": "longVTokens",
                            "type": "address[]"
                        },
                        {
                            "internalType": "address[]",
                            "name": "collateralAssets",
                            "type": "address[]"
                        },
                        {
                            "internalType": "uint256[]",
                            "name": "shortAmounts",
                            "type": "uint256[]"
                        },
                        {
                            "internalType": "uint256[]",
                            "name": "longAmounts",
                            "type": "uint256[]"
                        },
                        {
                            "internalType": "uint256[]",
                            "name": "collateralAmounts",
                            "type": "uint256[]"
                        }
                    ],
                    "internalType": "struct LibMarginVault.Vault",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_owner",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_vaultId",
                    "type": "uint256"
                }
            ],
            "name": "getVaultWithDetails",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address[]",
                            "name": "shortVTokens",
                            "type": "address[]"
                        },
                        {
                            "internalType": "address[]",
                            "name": "longVTokens",
                            "type": "address[]"
                        },
                        {
                            "internalType": "address[]",
                            "name": "collateralAssets",
                            "type": "address[]"
                        },
                        {
                            "internalType": "uint256[]",
                            "name": "shortAmounts",
                            "type": "uint256[]"
                        },
                        {
                            "internalType": "uint256[]",
                            "name": "longAmounts",
                            "type": "uint256[]"
                        },
                        {
                            "internalType": "uint256[]",
                            "name": "collateralAmounts",
                            "type": "uint256[]"
                        }
                    ],
                    "internalType": "struct LibMarginVault.Vault",
                    "name": "",
                    "type": "tuple"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_vToken",
                    "type": "address"
                }
            ],
            "name": "hasExpired",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_addressbook",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_owner",
                    "type": "address"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_owner",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_vaultId",
                    "type": "uint256"
                }
            ],
            "name": "isLiquidatable",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_operator",
                    "type": "address"
                }
            ],
            "name": "isOperator",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_vToken",
                    "type": "address"
                }
            ],
            "name": "isSettlementAllowed",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "enum LibActions.ActionType",
                            "name": "actionType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "owner",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "secondAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "asset",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "vaultId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "index",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "data",
                            "type": "bytes"
                        }
                    ],
                    "internalType": "struct LibActions.ActionArgs[]",
                    "name": "_actions",
                    "type": "tuple[]"
                }
            ],
            "name": "operate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "oracle",
            "outputs": [
                {
                    "internalType": "contract IOracleV2",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "partialPauser",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "pool",
            "outputs": [
                {
                    "internalType": "contract IMarginPool",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "refreshConfiguration",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "_isRestricted",
                    "type": "bool"
                }
            ],
            "name": "setCallRestriction",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_fullPauser",
                    "type": "address"
                }
            ],
            "name": "setFullPauser",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_collateral",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_cap",
                    "type": "uint256"
                }
            ],
            "name": "setNakedCap",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_operator",
                    "type": "address"
                },
                {
                    "internalType": "bool",
                    "name": "_isOperator",
                    "type": "bool"
                }
            ],
            "name": "setOperator",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_partialPauser",
                    "type": "address"
                }
            ],
            "name": "setPartialPauser",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "_fullyPaused",
                    "type": "bool"
                }
            ],
            "name": "setSystemFullyPaused",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bool",
                    "name": "_partiallyPaused",
                    "type": "bool"
                }
            ],
            "name": "setSystemPartiallyPaused",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_owner",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_vaultId",
                    "type": "uint256"
                }
            ],
            "name": "sync",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "systemFullyPaused",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "systemPartiallyPaused",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "whitelist",
            "outputs": [
                {
                    "internalType": "contract IWhitelist",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "bytecode": "0x60806040523480156200001157600080fd5b506200001d3362000027565b6001805562000082565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b61579880620000926000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80639f677ed911610130578063cdee058a116100b8578063e723406c1161007c578063e723406c146105a8578063eab7775b146105bb578063ef4fcafa146105cf578063f2fde38b146105e2578063f77bc88b146105f557600080fd5b8063cdee058a14610525578063ce3e39c014610539578063d66dd43e1461054c578063d99d13f514610575578063e69d849d1461059557600080fd5b8063beca75d7116100ff578063beca75d71461049a578063c220101d146104ad578063c644d3a2146104c0578063caa6d21a146104e9578063cab2e8051461051257600080fd5b80639f677ed914610425578063b617f0c614610438578063b6363cf21461044b578063bc463a3d1461048757600080fd5b806364681083116101be5780637dc0d1d0116101825780637dc0d1d0146103b35780638da5cb5b146103c657806393e59dc1146103dd5780639daafbe8146103f05780639db938911461041257600080fd5b8063646810831461033c5780636bd50cef146103445780636c0c3b991461038457806370dc320c14610398578063715018a6146103ab57600080fd5b80633fdfb2aa116102055780633fdfb2aa146102b2578063485cc955146102e2578063558a7297146102f5578063565eea1914610308578063573c473e1461032957600080fd5b806314b93faf1461023757806316f0115b1461025f57806329729d881461028a5780632eb1c3a71461029d575b600080fd5b61024a610245366004615050565b610608565b60405190151581526020015b60405180910390f35b600654610272906001600160a01b031681565b6040516001600160a01b039091168152602001610256565b600854610272906001600160a01b031681565b6102b06102ab366004615140565b610616565b005b6102c56102c0366004615140565b6106b2565b604080519315158452602084019290925290820152606001610256565b6102b06102f0366004615018565b6106d7565b6102b0610303366004615113565b610897565b61031b610316366004615140565b61094e565b604051908152602001610256565b6102b061033736600461522d565b6109f6565b6102b0610ac2565b600354600454600554600654604080516001600160a01b039586168152938516602085015291841691830191909152919091166060820152608001610256565b60085461024a90600160b01b900460ff1681565b600254610272906001600160a01b031681565b6102b0610ad4565b600454610272906001600160a01b031681565b6000546201000090046001600160a01b0316610272565b600354610272906001600160a01b031681565b6104036103fe366004615140565b610ae6565b604051610256939291906154fb565b600754610272906001600160a01b031681565b6102b061043336600461522d565b610d7f565b6102b061044636600461516b565b610e44565b61024a610459366004615018565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b6102b0610495366004614fd9565b610eae565b6102b06104a8366004614fd9565b610f7c565b61031b6104bb366004615140565b61104a565b61031b6104ce366004614fd9565b6001600160a01b03166000908152600e602052604090205490565b61031b6104f7366004614fd9565b6001600160a01b031660009081526009602052604090205490565b6102b061052036600461522d565b611104565b60085461024a90600160a01b900460ff1681565b600554610272906001600160a01b031681565b61031b61055a366004614fd9565b6001600160a01b03166000908152600f602052604090205490565b610588610583366004615140565b611192565b60405161025691906154c6565b6102b06105a3366004615140565b6113f3565b61024a6105b6366004614fd9565b611496565b60085461024a90600160a81b900460ff1681565b6102b06105dd366004615140565b6114b7565b6102b06105f0366004614fd9565b611504565b61024a610603366004614fd9565b61157a565b600060015b95945050505050565b61061e6115f6565b600081116106595760405162461bcd60e51b815260206004820152600360248201526221999b60e91b60448201526064015b60405180910390fd5b6001600160a01b0382166000818152600e602052604090819020839055517f6ff730ba70e34bd5ca823424bd15ab869cadc6bad079b527c71bde444ad6402b906106a69084815260200190565b60405180910390a25050565b6000806000806000806106c58888611657565b91985096509450505050509250925092565b600054610100900460ff16158080156106f75750600054600160ff909116105b806107115750303b158015610711575060005460ff166001145b6107745760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610650565b6000805460ff191660011790558015610797576000805461ff0019166101001790555b6001600160a01b0383166107d25760405162461bcd60e51b8152602060048201526002602482015261433760f01b6044820152606401610650565b6001600160a01b03821661080d5760405162461bcd60e51b8152602060048201526002602482015261086760f31b6044820152606401610650565b61081682611504565b600280546001600160a01b0319166001600160a01b03851617905561083961171b565b6008805460ff60b01b1916600160b01b1790558015610892576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b336000908152600b602090815260408083206001600160a01b038616845290915290205460ff16151581151514156108e15760405162461bcd60e51b8152600401610650906154aa565b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f1ae45540b0875932452da603b351ce2f1758258ba1345e79f8fc94f044cb078791015b60405180910390a35050565b60006109ed61095f6008600a61561a565b600554604051630478409360e41b81526001600160a01b0387811660048301526109e792879291169063478409309060240160206040518083038186803b1580156109a957600080fd5b505afa1580156109bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e1919061529b565b90611975565b90611981565b90505b92915050565b6007546001600160a01b03163314610a355760405162461bcd60e51b8152602060048201526002602482015261219960f11b6044820152606401610650565b60085460ff600160a01b9091041615158115151415610a665760405162461bcd60e51b8152600401610650906154aa565b6008805460ff60a01b1916600160a01b8315158102919091179182905560405160ff9190920416151581527f531c3d7229f510a8da00a0f5792686958cdd9c8a120c3c030a6053cd66b68556906020015b60405180910390a150565b610aca6115f6565b610ad261171b565b565b610adc6115f6565b610ad2600061198d565b610aee614e3d565b6001600160a01b0383166000818152600a602090815260408083208684528252808320848452600c8352818420878552835281842054948452600d83528184208785528352818420548251825460e09581028201860190945260c081018481529596879693959094929391928692849290918491840182828015610b9b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b7d575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610bfd57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bdf575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610c5f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c41575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610cb757602002820191906000526020600020905b815481526020019060010190808311610ca3575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610d0f57602002820191906000526020600020905b815481526020019060010190808311610cfb575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610d6757602002820191906000526020600020905b815481526020019060010190808311610d53575b50505050508152505092509250925092509250925092565b6008546001600160a01b03163314610dbe5760405162461bcd60e51b8152602060048201526002602482015261433160f01b6044820152606401610650565b60085460ff600160a81b9091041615158115151415610def5760405162461bcd60e51b8152600401610650906154aa565b6008805460ff60a81b1916600160a81b8315158102919091179182905560405160ff9190920416151581527f4f1d0445688d95c99ca9fc036f551b205fd18ff26a4443b1979c16d1ba66b53590602001610ab7565b610e4c6119e8565b610e54611a42565b6000806000610e6284611a81565b9250925092508215610e9f57610e788282611eab565b6001600160a01b0382166000908152600d6020908152604080832084845290915290204290555b505050610eab60018055565b50565b610eb66115f6565b6001600160a01b038116610ef25760405162461bcd60e51b815260206004820152600360248201526243313160e81b6044820152606401610650565b6007546001600160a01b0382811691161415610f205760405162461bcd60e51b8152600401610650906154aa565b6007546040516001600160a01b038084169216907f1440312dbc326ddc21bfa95078324bf5aaf6899e8a27cba3057c60adfc84e40b90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b610f846115f6565b6001600160a01b038116610fc05760405162461bcd60e51b815260206004820152600360248201526204331360ec1b6044820152606401610650565b6008546001600160a01b0382811691161415610fee5760405162461bcd60e51b8152600401610650906154aa565b6008546040516001600160a01b038084169216907f44f3e9e7b454118e9fcb2e3026396f57ca21d7bd7dcabd31d7f986806422f4df90600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b60008060006110598585610ae6565b5060055460405163cd43fbfb60e01b815292945090925060009182916001600160a01b03169063cd43fbfb9061109590879087906004016154d9565b604080518083038186803b1580156110ac57600080fd5b505afa1580156110c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e491906152b3565b91509150806110fa5760009450505050506109f0565b5095945050505050565b61110c6115f6565b60085460ff600160b01b909104161515811515141561113d5760405162461bcd60e51b8152600401610650906154aa565b6008805460ff60b01b1916600160b01b8315158102919091179182905560405160ff9190920416151581527f26d614575a4c104c181c87003d4bb00cc7ade00d5b47bf8775171c12a376b25590602001610ab7565b61119a614e3d565b6001600160a01b0383166000908152600a602090815260408083208584528252918290208251815460e09381028201840190945260c08101848152909391928492849184018282801561121657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111f8575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561127857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161125a575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156112da57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112bc575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561133257602002820191906000526020600020905b81548152602001906001019080831161131e575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561138a57602002820191906000526020600020905b815481526020019060010190808311611376575b50505050508152602001600582018054806020026020016040519081016040528092919081815260200182805480156113e257602002820191906000526020600020905b8154815260200190600101908083116113ce575b505050505081525050905092915050565b60065460405163dd2c99f760e01b81526001600160a01b039091169063dd2c99f79061142790859033908690600401615456565b600060405180830381600087803b15801561144157600080fd5b505af1158015611455573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f4dfff917e1fbb261a082e98cc7d43029621f6a6eb05ff3fef1510d5f1eb4857c90602001610942565b60008060008060006114a786611f80565b5060019998505050505050505050565b6114bf6119e8565b6114c7611a42565b6114d18282611eab565b6001600160a01b0382166000908152600d60209081526040808320848452909152902042905561150060018055565b5050565b61150c6115f6565b6001600160a01b0381166115715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610650565b610eab8161198d565b6000816001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b557600080fd5b505afa1580156115c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ed919061529b565b42101592915050565b6000546001600160a01b0362010000909104163314610ad25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610650565b61165f614e3d565b6000806000806000806116728989610ae6565b6005546040516338a51c6560e21b81529396509194509250600091829182916001600160a01b039091169063e2947194906116b5908990899089906004016154fb565b60606040518083038186803b1580156116cd57600080fd5b505afa1580156116e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117059190615265565b979e919d509b5095995094975050505050505050565b600260009054906101000a90046001600160a01b03166001600160a01b031663d01f63f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561176957600080fd5b505afa15801561177d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a19190614ffc565b600380546001600160a01b0319166001600160a01b039283161790556002546040805163419d8fe760e11b81529051919092169163833b1fce916004808301926020929190829003018186803b1580156117fa57600080fd5b505afa15801561180e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118329190614ffc565b600480546001600160a01b0319166001600160a01b039283161781556002546040805163cf28493f60e01b81529051919093169263cf28493f9281810192602092909190829003018186803b15801561188a57600080fd5b505afa15801561189e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c29190614ffc565b600580546001600160a01b0319166001600160a01b0392831617905560025460408051633aa431a160e11b8152905191909216916375486342916004808301926020929190829003018186803b15801561191b57600080fd5b505afa15801561192f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119539190614ffc565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60006109ed82846156c2565b60006109ed82846155b7565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b60026001541415611a3b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610650565b6002600155565b600854600160a81b900460ff1615610ad25760405162461bcd60e51b8152602060048201526002602482015261433560f01b6044820152606401610650565b60008060008060008060005b8751811015611e9f576000888281518110611ab857634e487b7160e01b600052603260045260246000fd5b60209081029190910101518051909150600781600a811115611aea57634e487b7160e01b600052602160045260246000fd5b14158015611b185750600881600a811115611b1557634e487b7160e01b600052602160045260246000fd5b14155b8015611b445750600a81600a811115611b4157634e487b7160e01b600052602160045260246000fd5b14155b8015611b705750600981600a811115611b6d57634e487b7160e01b600052602160045260246000fd5b14155b15611c12578315611bff5781602001516001600160a01b0316866001600160a01b031614611bc65760405162461bcd60e51b815260206004820152600360248201526221989960e91b6044820152606401610650565b81608001518514611bff5760405162461bcd60e51b815260206004820152600360248201526243313360e81b6044820152606401610650565b6001935081608001519450816020015195505b600081600a811115611c3457634e487b7160e01b600052602160045260246000fd5b1415611c5057611c4b611c46836121e5565b612335565b611e8a565b600381600a811115611c7257634e487b7160e01b600052602160045260246000fd5b1415611c8957611c4b611c8483612429565b612581565b600481600a811115611cab57634e487b7160e01b600052602160045260246000fd5b1415611cc257611c4b611cbd83612910565b612a43565b600581600a811115611ce457634e487b7160e01b600052602160045260246000fd5b1415611cfb57611c4b611cf683612429565b612caf565b600681600a811115611d1d57634e487b7160e01b600052602160045260246000fd5b1415611d3457611c4b611d2f83612910565b613048565b600181600a811115611d5657634e487b7160e01b600052602160045260246000fd5b1415611d6d57611c4b611d6883613366565b61342c565b600281600a811115611d8f57634e487b7160e01b600052602160045260246000fd5b1415611da657611c4b611da183613746565b61380c565b600881600a811115611dc857634e487b7160e01b600052602160045260246000fd5b1415611ddf57611c4b611dda83613ad9565b613bc0565b600781600a811115611e0157634e487b7160e01b600052602160045260246000fd5b1415611e1857611c4b611e1383613e0d565b613f40565b600a81600a811115611e3a57634e487b7160e01b600052602160045260246000fd5b1415611e5157611c4b611e4c836143ff565b614543565b600981600a811115611e7357634e487b7160e01b600052602160045260246000fd5b1415611e8a57611e8a611e8583614a99565b614b6b565b50508080611e97906156f8565b915050611a8d565b50969195509350915050565b600080611eb88484610ae6565b5060055460405163cd43fbfb60e01b81529294509092506000916001600160a01b039091169063cd43fbfb90611ef490869086906004016154d9565b604080518083038186803b158015611f0b57600080fd5b505afa158015611f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4391906152b3565b91505080611f795760405162461bcd60e51b815260206004820152600360248201526210cc4d60ea1b6044820152606401610650565b5050505050565b6000806000806000859050806001600160a01b0316630812c4526040518163ffffffff1660e01b815260040160c06040518083038186803b158015611fc457600080fd5b505afa925050508015611ff4575060408051601f3d908101601f19168201909252611ff1918101906150a0565b60015b6121ca57806001600160a01b031663aabaecd66040518163ffffffff1660e01b815260040160206040518083038186803b15801561203157600080fd5b505afa158015612045573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120699190614ffc565b816001600160a01b0316637158da7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120da9190614ffc565b826001600160a01b03166317d69bc86040518163ffffffff1660e01b815260040160206040518083038186803b15801561211357600080fd5b505afa158015612127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214b9190614ffc565b836001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561218457600080fd5b505afa158015612198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bc919061529b565b9450945094509450506121de565b5093985091965094509092506121de915050565b9193509193565b612212604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b60008251600a81111561223557634e487b7160e01b600052602160045260246000fd5b146122675760405162461bcd60e51b8152602060048201526002602482015261413160f01b6044820152606401610650565b60208201516001600160a01b03166122a65760405162461bcd60e51b8152602060048201526002602482015261209960f11b6044820152606401610650565b60008260e0015151602014156122d1578260e001518060200190518101906122ce919061529b565b90505b600281106123065760405162461bcd60e51b8152602060048201526002602482015261413360f01b6044820152606401610650565b604080516060810182526020808601516001600160a01b03168252608090950151948101949094528301525090565b61233d614c73565b8051339061234b8282614cb2565b82516001600160a01b0316600090815260096020526040812054612370906001614d28565b9050808460200151146123ab5760405162461bcd60e51b815260206004820152600360248201526243313560e81b6044820152606401610650565b83516001600160a01b0390811660009081526009602090815260408083208590558088018051895186168552600c8452828520878652845293829020939093559151875183518681529351919416927f5d66689e2c864b4f21efd3988c0ce5dc8a197981b68e81ce73660e92394fe25f92908290030190a350505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260038251600a81111561247e57634e487b7160e01b600052602160045260246000fd5b14806124aa575060058251600a8111156124a857634e487b7160e01b600052602160045260246000fd5b145b6124db5760405162461bcd60e51b8152602060048201526002602482015261082760f31b6044820152606401610650565b60208201516001600160a01b031661251a5760405162461bcd60e51b8152602060048201526002602482015261413960f01b6044820152606401610650565b6040518060c0016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b0316815260200183606001516001600160a01b031681526020018360c0015181526020018360a001518152509050919050565b612589614c73565b805133906125978282614cb2565b6125a983600001518460200151614d34565b6125c55760405162461bcd60e51b81526004016106509061548d565b60408301516001600160a01b03163314806125f9575082600001516001600160a01b031683604001516001600160a01b0316145b61262b5760405162461bcd60e51b815260206004820152600360248201526221989b60e91b6044820152606401610650565b600354606084015160405163ab0fed6960e01b81526001600160a01b03918216600482015291169063ab0fed699060240160206040518083038186803b15801561267457600080fd5b505afa158015612688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ac9190615249565b6126de5760405162461bcd60e51b815260206004820152600360248201526243313760e81b6044820152606401610650565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561272057600080fd5b505afa158015612734573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612758919061529b565b421061278c5760405162461bcd60e51b815260206004820152600360248201526208662760eb1b6044820152606401610650565b83516001600160a01b03166000908152600a6020908152604080832082880151845290915290819020606086015160a08701516080880151935163167820f560e21b815273__$d56df6d7767e6a78886764ada99b46cb82$__946359e083d4946127ff9490939092909190600401615520565b60006040518083038186803b15801561281757600080fd5b505af415801561282b573d6000803e3d6000fd5b5050600654606087015160408089015160a08a0151915163dd2c99f760e01b81526001600160a01b03909416955063dd2c99f7945061286f93909190600401615456565b600060405180830381600087803b15801561288957600080fd5b505af115801561289d573d6000803e3d6000fd5b5050505060608481015160408087015187516020808a015160808b015160a08c0151865192835292820152938401526001600160a01b03938416949184169316917ff2a719089ec9cda43ae0d01f405db3d33180555c7959f4567d9f086b23ba39a091015b60405180910390a450505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260048251600a81111561296557634e487b7160e01b600052602160045260246000fd5b1480612991575060068251600a81111561298f57634e487b7160e01b600052602160045260246000fd5b145b6129c35760405162461bcd60e51b815260206004820152600360248201526204131360ec1b6044820152606401610650565b60208201516001600160a01b0316612a035760405162461bcd60e51b815260206004820152600360248201526241313160e81b6044820152606401610650565b60408201516001600160a01b031661251a5760405162461bcd60e51b815260206004820152600360248201526220989960e91b6044820152606401610650565b612a4b614c73565b80513390612a598282614cb2565b612a6b83600001518460200151614d34565b612a875760405162461bcd60e51b81526004016106509061548d565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ac957600080fd5b505afa158015612add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b01919061529b565b4210612b355760405162461bcd60e51b815260206004820152600360248201526243313960e81b6044820152606401610650565b83516001600160a01b03166000908152600a6020908152604080832082880151845290915290819020606086015160a087015160808801519351634c7e1e7b60e11b815273__$d56df6d7767e6a78886764ada99b46cb82$__946398fc3cf694612ba89490939092909190600401615520565b60006040518083038186803b158015612bc057600080fd5b505af4158015612bd4573d6000803e3d6000fd5b5050600654606087015160408089015160a08a0151915163fa93b2a560e01b81526001600160a01b03909416955063fa93b2a59450612c1893909190600401615456565b600060405180830381600087803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b5050505060608481015160408087015187516020808a015160808b015160a08c0151865192835292820152938401526001600160a01b03938416949184169316917f3cbecc0f727c6803128f0008e527754cb30fe3c9098d636ccbdc874f5c3fab309101612902565b612cb7614c73565b80513390612cc58282614cb2565b612cd783600001518460200151614d34565b612cf35760405162461bcd60e51b81526004016106509061548d565b60408301516001600160a01b0316331480612d27575082600001516001600160a01b031683604001516001600160a01b0316145b612d595760405162461bcd60e51b815260206004820152600360248201526204332360ec1b6044820152606401610650565b600354606084015160405163f9839d8960e01b81526001600160a01b03918216600482015291169063f9839d899060240160206040518083038186803b158015612da257600080fd5b505afa158015612db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dda9190615249565b612e0c5760405162461bcd60e51b815260206004820152600360248201526243323160e81b6044820152606401610650565b6000612e2084600001518560200151610ae6565b509150508060011415612ecf5760a084015160608501516001600160a01b03166000908152600f6020526040902054612e5891614d28565b6060850180516001600160a01b039081166000908152600f6020818152604080842096909655845184168352600e8152858320549451909316825290915291909120541115612ecf5760405162461bcd60e51b815260206004820152600360248201526243333760e81b6044820152606401610650565b83516001600160a01b03166000908152600a6020908152604080832082880151845290915290819020606086015160a08701516080880151935162f976db60e41b815273__$d56df6d7767e6a78886764ada99b46cb82$__94630f976db094612f419490939092909190600401615520565b60006040518083038186803b158015612f5957600080fd5b505af4158015612f6d573d6000803e3d6000fd5b5050600654606087015160408089015160a08a0151915163dd2c99f760e01b81526001600160a01b03909416955063dd2c99f79450612fb193909190600401615456565b600060405180830381600087803b158015612fcb57600080fd5b505af1158015612fdf573d6000803e3d6000fd5b5050505060608481015160408087015187516020808a015160808b015160a08c0151865192835292820152938401526001600160a01b03938416949184169316917f9393273d1233277690c6b746d1bc5805536d5da0c32865cbd8867b6bd49581919101612902565b613050614c73565b8051339061305e8282614cb2565b61307083600001518460200151614d34565b61308c5760405162461bcd60e51b81526004016106509061548d565b6000806130a185600001518660200151610ae6565b50915091506130b38260000151614d61565b1561319057600082600001516000815181106130df57634e487b7160e01b600052603260045260246000fd5b60200260200101519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561312257600080fd5b505afa158015613136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315a919061529b565b421061318e5760405162461bcd60e51b815260206004820152600360248201526221991960e91b6044820152606401610650565b505b80600114156131e25760a085015160608601516001600160a01b03166000908152600f60205260409020546131c491614db3565b60608601516001600160a01b03166000908152600f60205260409020555b84516001600160a01b03166000908152600a6020908152604080832082890151845290915290819020606087015160a0880151608089015193516320a049cb60e01b815273__$d56df6d7767e6a78886764ada99b46cb82$__946320a049cb946132559490939092909190600401615520565b60006040518083038186803b15801561326d57600080fd5b505af4158015613281573d6000803e3d6000fd5b505060065460608801516040808a015160a08b0151915163fa93b2a560e01b81526001600160a01b03909416955063fa93b2a594506132c593909190600401615456565b600060405180830381600087803b1580156132df57600080fd5b505af11580156132f3573d6000803e3d6000fd5b5050505060608581015160408088015188516020808b015160808c015160a08d0151865192835292820152938401526001600160a01b03938416949184169316917f1346acd332f6678a7292aeda9a24cf74b9d97ef217344c674d246c86e1ba6e9b910160405180910390a45050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260018251600a8111156133bb57634e487b7160e01b600052602160045260246000fd5b146133ed5760405162461bcd60e51b8152602060048201526002602482015261104d60f21b6044820152606401610650565b60208201516001600160a01b031661251a5760405162461bcd60e51b8152602060048201526002602482015261413560f01b6044820152606401610650565b613434614c73565b805133906134428282614cb2565b61345483600001518460200151614d34565b6134705760405162461bcd60e51b81526004016106509061548d565b600354606084015160405163ab0fed6960e01b81526001600160a01b03918216600482015291169063ab0fed699060240160206040518083038186803b1580156134b957600080fd5b505afa1580156134cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f19190615249565b6135235760405162461bcd60e51b815260206004820152600360248201526243323360e81b6044820152606401610650565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561356557600080fd5b505afa158015613579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359d919061529b565b42106135d15760405162461bcd60e51b815260206004820152600360248201526210cc8d60ea1b6044820152606401610650565b83516001600160a01b03166000908152600a6020908152604080832082880151845290915290819020606086015160a087015160808801519351633350755960e01b815273__$d56df6d7767e6a78886764ada99b46cb82$__946333507559946136449490939092909190600401615520565b60006040518083038186803b15801561365c57600080fd5b505af4158015613670573d6000803e3d6000fd5b5050505060408481015160a08601519151636481ad5d60e01b81526001600160a01b0391821660048201526024810192909252821690636481ad5d90604401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050505060608481015160408087015187516020808a015160808b015160a08c0151865192835292820152938401526001600160a01b03938416949184169316917f1d239a426d8064ced32ea1b1900a89c32d89f8bef5aa26f3a9609cd1aa08281b9101612902565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260028251600a81111561379b57634e487b7160e01b600052602160045260246000fd5b146137cd5760405162461bcd60e51b8152602060048201526002602482015261209b60f11b6044820152606401610650565b60208201516001600160a01b031661251a5760405162461bcd60e51b8152602060048201526002602482015261413760f01b6044820152606401610650565b613814614c73565b805133906138228282614cb2565b61383483600001518460200151614d34565b6138505760405162461bcd60e51b81526004016106509061548d565b60408301516001600160a01b0316331480613884575082600001516001600160a01b031683604001516001600160a01b0316145b6138b65760405162461bcd60e51b815260206004820152600360248201526243323560e81b6044820152606401610650565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156138f857600080fd5b505afa15801561390c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613930919061529b565b42106139645760405162461bcd60e51b815260206004820152600360248201526221991b60e91b6044820152606401610650565b83516001600160a01b03166000908152600a6020908152604080832082880151845290915290819020606086015160a08701516080880151935163d91300bb60e01b815273__$d56df6d7767e6a78886764ada99b46cb82$__9463d91300bb946139d79490939092909190600401615520565b60006040518083038186803b1580156139ef57600080fd5b505af4158015613a03573d6000803e3d6000fd5b5050505060408481015160a0860151915163149b472760e11b81526001600160a01b03918216600482015260248101929092528216906329368e4e90604401600060405180830381600087803b158015613a5c57600080fd5b505af1158015613a70573d6000803e3d6000fd5b5050505060608481015160408087015187516020808a015160808b015160a08c0151865192835292820152938401526001600160a01b03938416949184169316917f0dffc90fa358ffd8e04e4b0801f2a089ba67a67ba309d7105ecf8ee4e94e61189101612902565b604080516060810182526000808252602082018190529181019190915260088251600a811115613b1957634e487b7160e01b600052602160045260246000fd5b14613b4c5760405162461bcd60e51b815260206004820152600360248201526241313360e81b6044820152606401610650565b60408201516001600160a01b0316613b8c5760405162461bcd60e51b8152602060048201526003602482015262104c4d60ea1b6044820152606401610650565b506040805160608082018352838301516001600160a01b0390811683529084015116602082015260a0909201519082015290565b602081015160035460405163ab0fed6960e01b81526001600160a01b0380841660048301529091169063ab0fed699060240160206040518083038186803b158015613c0a57600080fd5b505afa158015613c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c429190615249565b613c745760405162461bcd60e51b815260206004820152600360248201526243323760e81b6044820152606401610650565b600080600080613c8385611f80565b935093509350935080421015613cc15760405162461bcd60e51b815260206004820152600360248201526208664760eb1b6044820152606401610650565b6000613cd58760200151886040015161094e565b604080890151905163149b472760e11b815233600482015260248101919091529091506001600160a01b038716906329368e4e90604401600060405180830381600087803b158015613d2657600080fd5b505af1158015613d3a573d6000803e3d6000fd5b5050600654895160405163fa93b2a560e01b81526001600160a01b03909216935063fa93b2a59250613d73918991908690600401615456565b600060405180830381600087803b158015613d8d57600080fd5b505af1158015613da1573d6000803e3d6000fd5b505088516020808b01516040808d015181516001600160a01b038d8116825294810191909152908101879052928216945033935016907f18fd144d7dbcbaa6f00fd47a84adc7dc3cc64a326ffa2dc7691a25e3837dba039060600160405180910390a450505050505050565b604080516060810182526000808252602082018190529181019190915260078251600a811115613e4d57634e487b7160e01b600052602160045260246000fd5b14613e805760405162461bcd60e51b815260206004820152600360248201526241313560e81b6044820152606401610650565b60208201516001600160a01b0316613ec05760405162461bcd60e51b815260206004820152600360248201526220989b60e91b6044820152606401610650565b60408201516001600160a01b0316613f005760405162461bcd60e51b815260206004820152600360248201526241313760e81b6044820152606401610650565b604051806060016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b03168152509050919050565b80513390613f4e8282614cb2565b613f6083600001518460200151614d34565b613f7c5760405162461bcd60e51b81526004016106509061548d565b600080613f9185600001518660200151610ae6565b5091509150600080613fa68460000151614d61565b90506000613fb78560200151614d61565b90508180613fc25750805b613ff45760405162461bcd60e51b815260206004820152600360248201526204333360ec1b6044820152606401610650565b8161402b57846020015160008151811061401e57634e487b7160e01b600052603260045260246000fd5b6020026020010151614055565b8451805160009061404c57634e487b7160e01b600052603260045260246000fd5b60200260200101515b92508015614145576000856020015160008151811061408457634e487b7160e01b600052603260045260246000fd5b60200260200101519050806001600160a01b03166329368e4e600660009054906101000a90046001600160a01b031688608001516000815181106140d857634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016141119291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b15801561412b57600080fd5b505af115801561413f573d6000803e3d6000fd5b50505050505b505060008060008061415685611f80565b9350935093509350804210156141945760405162461bcd60e51b815260206004820152600360248201526243333160e81b6044820152606401610650565b60055460405163cd43fbfb60e01b815260009182916001600160a01b039091169063cd43fbfb906141cb908c908c906004016154d9565b604080518083038186803b1580156141e257600080fd5b505afa1580156141f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061421a91906152b3565b91509150806142515760405162461bcd60e51b815260206004820152600360248201526221999960e91b6044820152606401610650565b600a60008d600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008d602001518152602001908152602001600020600080820160006142a09190614e73565b6142ae600183016000614e73565b6142bc600283016000614e73565b6142ca600383016000614e73565b6142d8600483016000614e73565b6142e6600583016000614e73565b5050876001141561432e576001600160a01b0386166000908152600f60205260409020546143149083614db3565b6001600160a01b0387166000908152600f60205260409020555b6006546040808e0151905163fa93b2a560e01b81526001600160a01b039092169163fa93b2a591614366918a91908790600401615456565b600060405180830381600087803b15801561438057600080fd5b505af1158015614394573d6000803e3d6000fd5b5050505060208c8101516040808f01518f518251848152948501879052929390926001600160a01b03808516939116917f94313bcf8d09aa1c7f6bf11b64131c7b49a16e1f90231d37e2e979495fb1988c910160405180910390a35050505050505050505050505050565b604080516080810182526000808252602082018190529181018290526060810191909152600a8251600a81111561444657634e487b7160e01b600052602160045260246000fd5b146144795760405162461bcd60e51b815260206004820152600360248201526208262760eb1b6044820152606401610650565b60208201516001600160a01b03166144b95760405162461bcd60e51b815260206004820152600360248201526241313960e81b6044820152606401610650565b60408201516001600160a01b03166144f95760405162461bcd60e51b815260206004820152600360248201526204132360ec1b6044820152606401610650565b604051806080016040528083602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836080015181526020018360a001518152509050919050565b61454b614c73565b61455d81600001518260400151614d34565b6145795760405162461bcd60e51b81526004016106509061548d565b60008060008061459185600001518660400151611657565b9350935093509350826145cc5760405162461bcd60e51b815260206004820152600360248201526243333360e81b6044820152606401610650565b60006145ed6305f5e1006109e785896060015161197590919063ffffffff16565b905060006146348760600151876060015160008151811061461e57634e487b7160e01b600052603260045260246000fd5b6020026020010151614db390919063ffffffff16565b11156146985781614664828760a0015160008151811061461e57634e487b7160e01b600052603260045260246000fd5b10156146985760405162461bcd60e51b815260206004820152600360248201526210cccd60ea1b6044820152606401610650565b845180516000906146b957634e487b7160e01b600052603260045260246000fd5b6020908102919091010151606087015160405163149b472760e11b815233600482015260248101919091526001600160a01b03909116906329368e4e90604401600060405180830381600087803b15801561471357600080fd5b505af1158015614727573d6000803e3d6000fd5b505087516001600160a01b03166000908152600a60209081526040808320818c0151845290915280822090890151805173__$d56df6d7767e6a78886764ada99b46cb82$__95506320a049cb94509192909161479357634e487b7160e01b600052603260045260246000fd5b60200260200101518460006040518563ffffffff1660e01b81526004016147bd9493929190615520565b60006040518083038186803b1580156147d557600080fd5b505af41580156147e9573d6000803e3d6000fd5b505087516001600160a01b03166000908152600a60209081526040808320818c0151845290915281208851805173__$d56df6d7767e6a78886764ada99b46cb82$__955063d91300bb94509192909161485257634e487b7160e01b600052603260045260246000fd5b6020026020010151896060015160006040518563ffffffff1660e01b81526004016148809493929190615520565b60006040518083038186803b15801561489857600080fd5b505af41580156148ac573d6000803e3d6000fd5b5050505061491481600f600088604001516000815181106148dd57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054614db390919063ffffffff16565b600f6000876040015160008151811061493d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600660009054906101000a90046001600160a01b03166001600160a01b031663fa93b2a586604001516000815181106149b257634e487b7160e01b600052603260045260246000fd5b60200260200101518860200151846040518463ffffffff1660e01b81526004016149de93929190615456565b600060405180830381600087803b1580156149f857600080fd5b505af1158015614a0c573d6000803e3d6000fd5b5050505085600001516001600160a01b031686602001516001600160a01b0316336001600160a01b03167f32a13c13f21a29361ca0058d0c1dd3d937fbef0d7734d6049e353f2f83ad1c0386858b606001518c60400151604051614a89949392919093845260208401929092526040830152606082015260800190565b60405180910390a4505050505050565b60408051808201909152600081526060602082015260098251600a811115614ad157634e487b7160e01b600052602160045260246000fd5b14614b045760405162461bcd60e51b815260206004820152600360248201526220991960e91b6044820152606401610650565b60408201516001600160a01b0316614b445760405162461bcd60e51b815260206004820152600360248201526241323360e81b6044820152606401610650565b50604080518082018252908201516001600160a01b0316815260e090910151602082015290565b614b73614c73565b8051600854600160b01b900460ff1615614bc157614b9081614dbf565b614bc15760405162461bcd60e51b8152602060048201526002602482015261433360f01b6044820152606401610650565b815160208301516040516309c23da560e41b81526001600160a01b0390921691639c23da5091614bf69133919060040161542a565b600060405180830381600087803b158015614c1057600080fd5b505af1158015614c24573d6000803e3d6000fd5b5050505081600001516001600160a01b0316336001600160a01b03167f8750bdaf6e88201790ee2765fea3ac73b514a52658c818723a30de91029ad0008460200151604051610942919061547a565b600854600160a01b900460ff1615610ad25760405162461bcd60e51b815260206004820152600260248201526110cd60f21b6044820152606401610650565b806001600160a01b0316826001600160a01b03161480614cf757506001600160a01b038082166000908152600b602090815260408083209386168352929052205460ff165b6115005760405162461bcd60e51b8152602060048201526002602482015261219b60f11b6044820152606401610650565b60006109ed828461559f565b600080821180156109ed5750506001600160a01b0391909116600090815260096020526040902054101590565b60008082511180156109f0575060006001600160a01b031682600081518110614d9a57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316141592915050565b60006109ed82846156e1565b6003546040516351572a2d60e11b81526001600160a01b038381166004830152600092169063a2ae545a9060240160206040518083038186803b158015614e0557600080fd5b505afa158015614e19573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f09190615249565b6040518060c001604052806060815260200160608152602001606081526020016060815260200160608152602001606081525090565b5080546000825590600052602060002090810190610eab91905b80821115614ea15760008155600101614e8d565b5090565b8035614eb08161573f565b919050565b600082601f830112614ec5578081fd5b813567ffffffffffffffff811115614edf57614edf615729565b614ef2601f8201601f191660200161556e565b818152846020838601011115614f06578283fd5b816020850160208301379081016020019190915292915050565b8035600b8110614eb057600080fd5b60006101008284031215614f41578081fd5b614f49615544565b9050614f5482614f20565b8152614f6260208301614ea5565b6020820152614f7360408301614ea5565b6040820152614f8460608301614ea5565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013567ffffffffffffffff811115614fc157600080fd5b614fcd84828501614eb5565b60e08301525092915050565b600060208284031215614fea578081fd5b8135614ff58161573f565b9392505050565b60006020828403121561500d578081fd5b8151614ff58161573f565b6000806040838503121561502a578081fd5b82356150358161573f565b915060208301356150458161573f565b809150509250929050565b60008060008060808587031215615065578182fd5b84356150708161573f565b935060208501356150808161573f565b925060408501356150908161573f565b9396929550929360600135925050565b60008060008060008060c087890312156150b8578182fd5b86516150c38161573f565b60208801519096506150d48161573f565b60408801519095506150e58161573f565b80945050606087015192506080870151915060a087015161510581615754565b809150509295509295509295565b60008060408385031215615125578182fd5b82356151308161573f565b9150602083013561504581615754565b60008060408385031215615152578182fd5b823561515d8161573f565b946020939093013593505050565b6000602080838503121561517d578182fd5b823567ffffffffffffffff80821115615194578384fd5b818501915085601f8301126151a7578384fd5b8135818111156151b9576151b9615729565b8060051b6151c885820161556e565b8281528581019085870183870188018b10156151e2578889fd5b8893505b8484101561521f578035868111156151fc57898afd5b61520a8c8a838b0101614f2f565b845250600193909301929187019187016151e6565b509998505050505050505050565b60006020828403121561523e578081fd5b8135614ff581615754565b60006020828403121561525a578081fd5b8151614ff581615754565b600080600060608486031215615279578081fd5b835161528481615754565b602085015160409095015190969495509392505050565b6000602082840312156152ac578081fd5b5051919050565b600080604083850312156152c5578182fd5b82519150602083015161504581615754565b6000815180845260208085019450808401835b8381101561530f5781516001600160a01b0316875295820195908201906001016152ea565b509495945050505050565b6000815180845260208085019450808401835b8381101561530f5781518752958201959082019060010161532d565b60008151808452815b8181101561536e57602081850181015186830182015201615352565b8181111561537f5782602083870101525b50601f01601f19169290920160200192915050565b6000815160c084526153a960c08501826152d7565b9050602083015184820360208601526153c282826152d7565b915050604083015184820360408601526153dc82826152d7565b915050606083015184820360608601526153f6828261531a565b91505060808301518482036080860152615410828261531a565b91505060a083015184820360a086015261060d828261531a565b6001600160a01b038316815260406020820181905260009061544e90830184615349565b949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020815260006109ed6020830184615349565b60208082526003908201526243333560e81b604082015260600190565b602080825260029082015261433960f01b604082015260600190565b6020815260006109ed6020830184615394565b6040815260006154ec6040830185615394565b90508260208301529392505050565b60608152600061550e6060830186615394565b60208301949094525060400152919050565b9384526001600160a01b039290921660208401526040830152606082015260800190565b604051610100810167ffffffffffffffff8111828210171561556857615568615729565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561559757615597615729565b604052919050565b600082198211156155b2576155b2615713565b500190565b6000826155d257634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156156125781600019048211156155f8576155f8615713565b8085161561560557918102915b93841c93908002906155dc565b509250929050565b60006109ed8383600082615630575060016109f0565b8161563d575060006109f0565b8160018114615653576002811461565d57615679565b60019150506109f0565b60ff84111561566e5761566e615713565b50506001821b6109f0565b5060208310610133831016604e8410600b841016171561569c575081810a6109f0565b6156a683836155d7565b80600019048211156156ba576156ba615713565b029392505050565b60008160001904831182151516156156dc576156dc615713565b500290565b6000828210156156f3576156f3615713565b500390565b600060001982141561570c5761570c615713565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610eab57600080fd5b8015158114610eab57600080fdfea26469706673582212200d12ef0c7c89aa049d2e82749da6cd12726ed2f8c549b14fe43cb11beb91fdf064736f6c63430008040033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c80639f677ed911610130578063cdee058a116100b8578063e723406c1161007c578063e723406c146105a8578063eab7775b146105bb578063ef4fcafa146105cf578063f2fde38b146105e2578063f77bc88b146105f557600080fd5b8063cdee058a14610525578063ce3e39c014610539578063d66dd43e1461054c578063d99d13f514610575578063e69d849d1461059557600080fd5b8063beca75d7116100ff578063beca75d71461049a578063c220101d146104ad578063c644d3a2146104c0578063caa6d21a146104e9578063cab2e8051461051257600080fd5b80639f677ed914610425578063b617f0c614610438578063b6363cf21461044b578063bc463a3d1461048757600080fd5b806364681083116101be5780637dc0d1d0116101825780637dc0d1d0146103b35780638da5cb5b146103c657806393e59dc1146103dd5780639daafbe8146103f05780639db938911461041257600080fd5b8063646810831461033c5780636bd50cef146103445780636c0c3b991461038457806370dc320c14610398578063715018a6146103ab57600080fd5b80633fdfb2aa116102055780633fdfb2aa146102b2578063485cc955146102e2578063558a7297146102f5578063565eea1914610308578063573c473e1461032957600080fd5b806314b93faf1461023757806316f0115b1461025f57806329729d881461028a5780632eb1c3a71461029d575b600080fd5b61024a610245366004615050565b610608565b60405190151581526020015b60405180910390f35b600654610272906001600160a01b031681565b6040516001600160a01b039091168152602001610256565b600854610272906001600160a01b031681565b6102b06102ab366004615140565b610616565b005b6102c56102c0366004615140565b6106b2565b604080519315158452602084019290925290820152606001610256565b6102b06102f0366004615018565b6106d7565b6102b0610303366004615113565b610897565b61031b610316366004615140565b61094e565b604051908152602001610256565b6102b061033736600461522d565b6109f6565b6102b0610ac2565b600354600454600554600654604080516001600160a01b039586168152938516602085015291841691830191909152919091166060820152608001610256565b60085461024a90600160b01b900460ff1681565b600254610272906001600160a01b031681565b6102b0610ad4565b600454610272906001600160a01b031681565b6000546201000090046001600160a01b0316610272565b600354610272906001600160a01b031681565b6104036103fe366004615140565b610ae6565b604051610256939291906154fb565b600754610272906001600160a01b031681565b6102b061043336600461522d565b610d7f565b6102b061044636600461516b565b610e44565b61024a610459366004615018565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b6102b0610495366004614fd9565b610eae565b6102b06104a8366004614fd9565b610f7c565b61031b6104bb366004615140565b61104a565b61031b6104ce366004614fd9565b6001600160a01b03166000908152600e602052604090205490565b61031b6104f7366004614fd9565b6001600160a01b031660009081526009602052604090205490565b6102b061052036600461522d565b611104565b60085461024a90600160a01b900460ff1681565b600554610272906001600160a01b031681565b61031b61055a366004614fd9565b6001600160a01b03166000908152600f602052604090205490565b610588610583366004615140565b611192565b60405161025691906154c6565b6102b06105a3366004615140565b6113f3565b61024a6105b6366004614fd9565b611496565b60085461024a90600160a81b900460ff1681565b6102b06105dd366004615140565b6114b7565b6102b06105f0366004614fd9565b611504565b61024a610603366004614fd9565b61157a565b600060015b95945050505050565b61061e6115f6565b600081116106595760405162461bcd60e51b815260206004820152600360248201526221999b60e91b60448201526064015b60405180910390fd5b6001600160a01b0382166000818152600e602052604090819020839055517f6ff730ba70e34bd5ca823424bd15ab869cadc6bad079b527c71bde444ad6402b906106a69084815260200190565b60405180910390a25050565b6000806000806000806106c58888611657565b91985096509450505050509250925092565b600054610100900460ff16158080156106f75750600054600160ff909116105b806107115750303b158015610711575060005460ff166001145b6107745760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610650565b6000805460ff191660011790558015610797576000805461ff0019166101001790555b6001600160a01b0383166107d25760405162461bcd60e51b8152602060048201526002602482015261433760f01b6044820152606401610650565b6001600160a01b03821661080d5760405162461bcd60e51b8152602060048201526002602482015261086760f31b6044820152606401610650565b61081682611504565b600280546001600160a01b0319166001600160a01b03851617905561083961171b565b6008805460ff60b01b1916600160b01b1790558015610892576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b336000908152600b602090815260408083206001600160a01b038616845290915290205460ff16151581151514156108e15760405162461bcd60e51b8152600401610650906154aa565b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f1ae45540b0875932452da603b351ce2f1758258ba1345e79f8fc94f044cb078791015b60405180910390a35050565b60006109ed61095f6008600a61561a565b600554604051630478409360e41b81526001600160a01b0387811660048301526109e792879291169063478409309060240160206040518083038186803b1580156109a957600080fd5b505afa1580156109bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e1919061529b565b90611975565b90611981565b90505b92915050565b6007546001600160a01b03163314610a355760405162461bcd60e51b8152602060048201526002602482015261219960f11b6044820152606401610650565b60085460ff600160a01b9091041615158115151415610a665760405162461bcd60e51b8152600401610650906154aa565b6008805460ff60a01b1916600160a01b8315158102919091179182905560405160ff9190920416151581527f531c3d7229f510a8da00a0f5792686958cdd9c8a120c3c030a6053cd66b68556906020015b60405180910390a150565b610aca6115f6565b610ad261171b565b565b610adc6115f6565b610ad2600061198d565b610aee614e3d565b6001600160a01b0383166000818152600a602090815260408083208684528252808320848452600c8352818420878552835281842054948452600d83528184208785528352818420548251825460e09581028201860190945260c081018481529596879693959094929391928692849290918491840182828015610b9b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b7d575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610bfd57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bdf575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610c5f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c41575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610cb757602002820191906000526020600020905b815481526020019060010190808311610ca3575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610d0f57602002820191906000526020600020905b815481526020019060010190808311610cfb575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610d6757602002820191906000526020600020905b815481526020019060010190808311610d53575b50505050508152505092509250925092509250925092565b6008546001600160a01b03163314610dbe5760405162461bcd60e51b8152602060048201526002602482015261433160f01b6044820152606401610650565b60085460ff600160a81b9091041615158115151415610def5760405162461bcd60e51b8152600401610650906154aa565b6008805460ff60a81b1916600160a81b8315158102919091179182905560405160ff9190920416151581527f4f1d0445688d95c99ca9fc036f551b205fd18ff26a4443b1979c16d1ba66b53590602001610ab7565b610e4c6119e8565b610e54611a42565b6000806000610e6284611a81565b9250925092508215610e9f57610e788282611eab565b6001600160a01b0382166000908152600d6020908152604080832084845290915290204290555b505050610eab60018055565b50565b610eb66115f6565b6001600160a01b038116610ef25760405162461bcd60e51b815260206004820152600360248201526243313160e81b6044820152606401610650565b6007546001600160a01b0382811691161415610f205760405162461bcd60e51b8152600401610650906154aa565b6007546040516001600160a01b038084169216907f1440312dbc326ddc21bfa95078324bf5aaf6899e8a27cba3057c60adfc84e40b90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b610f846115f6565b6001600160a01b038116610fc05760405162461bcd60e51b815260206004820152600360248201526204331360ec1b6044820152606401610650565b6008546001600160a01b0382811691161415610fee5760405162461bcd60e51b8152600401610650906154aa565b6008546040516001600160a01b038084169216907f44f3e9e7b454118e9fcb2e3026396f57ca21d7bd7dcabd31d7f986806422f4df90600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b60008060006110598585610ae6565b5060055460405163cd43fbfb60e01b815292945090925060009182916001600160a01b03169063cd43fbfb9061109590879087906004016154d9565b604080518083038186803b1580156110ac57600080fd5b505afa1580156110c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e491906152b3565b91509150806110fa5760009450505050506109f0565b5095945050505050565b61110c6115f6565b60085460ff600160b01b909104161515811515141561113d5760405162461bcd60e51b8152600401610650906154aa565b6008805460ff60b01b1916600160b01b8315158102919091179182905560405160ff9190920416151581527f26d614575a4c104c181c87003d4bb00cc7ade00d5b47bf8775171c12a376b25590602001610ab7565b61119a614e3d565b6001600160a01b0383166000908152600a602090815260408083208584528252918290208251815460e09381028201840190945260c08101848152909391928492849184018282801561121657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111f8575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561127857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161125a575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156112da57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112bc575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561133257602002820191906000526020600020905b81548152602001906001019080831161131e575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561138a57602002820191906000526020600020905b815481526020019060010190808311611376575b50505050508152602001600582018054806020026020016040519081016040528092919081815260200182805480156113e257602002820191906000526020600020905b8154815260200190600101908083116113ce575b505050505081525050905092915050565b60065460405163dd2c99f760e01b81526001600160a01b039091169063dd2c99f79061142790859033908690600401615456565b600060405180830381600087803b15801561144157600080fd5b505af1158015611455573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f4dfff917e1fbb261a082e98cc7d43029621f6a6eb05ff3fef1510d5f1eb4857c90602001610942565b60008060008060006114a786611f80565b5060019998505050505050505050565b6114bf6119e8565b6114c7611a42565b6114d18282611eab565b6001600160a01b0382166000908152600d60209081526040808320848452909152902042905561150060018055565b5050565b61150c6115f6565b6001600160a01b0381166115715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610650565b610eab8161198d565b6000816001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b557600080fd5b505afa1580156115c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ed919061529b565b42101592915050565b6000546001600160a01b0362010000909104163314610ad25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610650565b61165f614e3d565b6000806000806000806116728989610ae6565b6005546040516338a51c6560e21b81529396509194509250600091829182916001600160a01b039091169063e2947194906116b5908990899089906004016154fb565b60606040518083038186803b1580156116cd57600080fd5b505afa1580156116e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117059190615265565b979e919d509b5095995094975050505050505050565b600260009054906101000a90046001600160a01b03166001600160a01b031663d01f63f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561176957600080fd5b505afa15801561177d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a19190614ffc565b600380546001600160a01b0319166001600160a01b039283161790556002546040805163419d8fe760e11b81529051919092169163833b1fce916004808301926020929190829003018186803b1580156117fa57600080fd5b505afa15801561180e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118329190614ffc565b600480546001600160a01b0319166001600160a01b039283161781556002546040805163cf28493f60e01b81529051919093169263cf28493f9281810192602092909190829003018186803b15801561188a57600080fd5b505afa15801561189e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c29190614ffc565b600580546001600160a01b0319166001600160a01b0392831617905560025460408051633aa431a160e11b8152905191909216916375486342916004808301926020929190829003018186803b15801561191b57600080fd5b505afa15801561192f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119539190614ffc565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60006109ed82846156c2565b60006109ed82846155b7565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b60026001541415611a3b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610650565b6002600155565b600854600160a81b900460ff1615610ad25760405162461bcd60e51b8152602060048201526002602482015261433560f01b6044820152606401610650565b60008060008060008060005b8751811015611e9f576000888281518110611ab857634e487b7160e01b600052603260045260246000fd5b60209081029190910101518051909150600781600a811115611aea57634e487b7160e01b600052602160045260246000fd5b14158015611b185750600881600a811115611b1557634e487b7160e01b600052602160045260246000fd5b14155b8015611b445750600a81600a811115611b4157634e487b7160e01b600052602160045260246000fd5b14155b8015611b705750600981600a811115611b6d57634e487b7160e01b600052602160045260246000fd5b14155b15611c12578315611bff5781602001516001600160a01b0316866001600160a01b031614611bc65760405162461bcd60e51b815260206004820152600360248201526221989960e91b6044820152606401610650565b81608001518514611bff5760405162461bcd60e51b815260206004820152600360248201526243313360e81b6044820152606401610650565b6001935081608001519450816020015195505b600081600a811115611c3457634e487b7160e01b600052602160045260246000fd5b1415611c5057611c4b611c46836121e5565b612335565b611e8a565b600381600a811115611c7257634e487b7160e01b600052602160045260246000fd5b1415611c8957611c4b611c8483612429565b612581565b600481600a811115611cab57634e487b7160e01b600052602160045260246000fd5b1415611cc257611c4b611cbd83612910565b612a43565b600581600a811115611ce457634e487b7160e01b600052602160045260246000fd5b1415611cfb57611c4b611cf683612429565b612caf565b600681600a811115611d1d57634e487b7160e01b600052602160045260246000fd5b1415611d3457611c4b611d2f83612910565b613048565b600181600a811115611d5657634e487b7160e01b600052602160045260246000fd5b1415611d6d57611c4b611d6883613366565b61342c565b600281600a811115611d8f57634e487b7160e01b600052602160045260246000fd5b1415611da657611c4b611da183613746565b61380c565b600881600a811115611dc857634e487b7160e01b600052602160045260246000fd5b1415611ddf57611c4b611dda83613ad9565b613bc0565b600781600a811115611e0157634e487b7160e01b600052602160045260246000fd5b1415611e1857611c4b611e1383613e0d565b613f40565b600a81600a811115611e3a57634e487b7160e01b600052602160045260246000fd5b1415611e5157611c4b611e4c836143ff565b614543565b600981600a811115611e7357634e487b7160e01b600052602160045260246000fd5b1415611e8a57611e8a611e8583614a99565b614b6b565b50508080611e97906156f8565b915050611a8d565b50969195509350915050565b600080611eb88484610ae6565b5060055460405163cd43fbfb60e01b81529294509092506000916001600160a01b039091169063cd43fbfb90611ef490869086906004016154d9565b604080518083038186803b158015611f0b57600080fd5b505afa158015611f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4391906152b3565b91505080611f795760405162461bcd60e51b815260206004820152600360248201526210cc4d60ea1b6044820152606401610650565b5050505050565b6000806000806000859050806001600160a01b0316630812c4526040518163ffffffff1660e01b815260040160c06040518083038186803b158015611fc457600080fd5b505afa925050508015611ff4575060408051601f3d908101601f19168201909252611ff1918101906150a0565b60015b6121ca57806001600160a01b031663aabaecd66040518163ffffffff1660e01b815260040160206040518083038186803b15801561203157600080fd5b505afa158015612045573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120699190614ffc565b816001600160a01b0316637158da7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120a257600080fd5b505afa1580156120b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120da9190614ffc565b826001600160a01b03166317d69bc86040518163ffffffff1660e01b815260040160206040518083038186803b15801561211357600080fd5b505afa158015612127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214b9190614ffc565b836001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561218457600080fd5b505afa158015612198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bc919061529b565b9450945094509450506121de565b5093985091965094509092506121de915050565b9193509193565b612212604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b60008251600a81111561223557634e487b7160e01b600052602160045260246000fd5b146122675760405162461bcd60e51b8152602060048201526002602482015261413160f01b6044820152606401610650565b60208201516001600160a01b03166122a65760405162461bcd60e51b8152602060048201526002602482015261209960f11b6044820152606401610650565b60008260e0015151602014156122d1578260e001518060200190518101906122ce919061529b565b90505b600281106123065760405162461bcd60e51b8152602060048201526002602482015261413360f01b6044820152606401610650565b604080516060810182526020808601516001600160a01b03168252608090950151948101949094528301525090565b61233d614c73565b8051339061234b8282614cb2565b82516001600160a01b0316600090815260096020526040812054612370906001614d28565b9050808460200151146123ab5760405162461bcd60e51b815260206004820152600360248201526243313560e81b6044820152606401610650565b83516001600160a01b0390811660009081526009602090815260408083208590558088018051895186168552600c8452828520878652845293829020939093559151875183518681529351919416927f5d66689e2c864b4f21efd3988c0ce5dc8a197981b68e81ce73660e92394fe25f92908290030190a350505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260038251600a81111561247e57634e487b7160e01b600052602160045260246000fd5b14806124aa575060058251600a8111156124a857634e487b7160e01b600052602160045260246000fd5b145b6124db5760405162461bcd60e51b8152602060048201526002602482015261082760f31b6044820152606401610650565b60208201516001600160a01b031661251a5760405162461bcd60e51b8152602060048201526002602482015261413960f01b6044820152606401610650565b6040518060c0016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b0316815260200183606001516001600160a01b031681526020018360c0015181526020018360a001518152509050919050565b612589614c73565b805133906125978282614cb2565b6125a983600001518460200151614d34565b6125c55760405162461bcd60e51b81526004016106509061548d565b60408301516001600160a01b03163314806125f9575082600001516001600160a01b031683604001516001600160a01b0316145b61262b5760405162461bcd60e51b815260206004820152600360248201526221989b60e91b6044820152606401610650565b600354606084015160405163ab0fed6960e01b81526001600160a01b03918216600482015291169063ab0fed699060240160206040518083038186803b15801561267457600080fd5b505afa158015612688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ac9190615249565b6126de5760405162461bcd60e51b815260206004820152600360248201526243313760e81b6044820152606401610650565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561272057600080fd5b505afa158015612734573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612758919061529b565b421061278c5760405162461bcd60e51b815260206004820152600360248201526208662760eb1b6044820152606401610650565b83516001600160a01b03166000908152600a6020908152604080832082880151845290915290819020606086015160a08701516080880151935163167820f560e21b815273__$d56df6d7767e6a78886764ada99b46cb82$__946359e083d4946127ff9490939092909190600401615520565b60006040518083038186803b15801561281757600080fd5b505af415801561282b573d6000803e3d6000fd5b5050600654606087015160408089015160a08a0151915163dd2c99f760e01b81526001600160a01b03909416955063dd2c99f7945061286f93909190600401615456565b600060405180830381600087803b15801561288957600080fd5b505af115801561289d573d6000803e3d6000fd5b5050505060608481015160408087015187516020808a015160808b015160a08c0151865192835292820152938401526001600160a01b03938416949184169316917ff2a719089ec9cda43ae0d01f405db3d33180555c7959f4567d9f086b23ba39a091015b60405180910390a450505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260048251600a81111561296557634e487b7160e01b600052602160045260246000fd5b1480612991575060068251600a81111561298f57634e487b7160e01b600052602160045260246000fd5b145b6129c35760405162461bcd60e51b815260206004820152600360248201526204131360ec1b6044820152606401610650565b60208201516001600160a01b0316612a035760405162461bcd60e51b815260206004820152600360248201526241313160e81b6044820152606401610650565b60408201516001600160a01b031661251a5760405162461bcd60e51b815260206004820152600360248201526220989960e91b6044820152606401610650565b612a4b614c73565b80513390612a598282614cb2565b612a6b83600001518460200151614d34565b612a875760405162461bcd60e51b81526004016106509061548d565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ac957600080fd5b505afa158015612add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b01919061529b565b4210612b355760405162461bcd60e51b815260206004820152600360248201526243313960e81b6044820152606401610650565b83516001600160a01b03166000908152600a6020908152604080832082880151845290915290819020606086015160a087015160808801519351634c7e1e7b60e11b815273__$d56df6d7767e6a78886764ada99b46cb82$__946398fc3cf694612ba89490939092909190600401615520565b60006040518083038186803b158015612bc057600080fd5b505af4158015612bd4573d6000803e3d6000fd5b5050600654606087015160408089015160a08a0151915163fa93b2a560e01b81526001600160a01b03909416955063fa93b2a59450612c1893909190600401615456565b600060405180830381600087803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b5050505060608481015160408087015187516020808a015160808b015160a08c0151865192835292820152938401526001600160a01b03938416949184169316917f3cbecc0f727c6803128f0008e527754cb30fe3c9098d636ccbdc874f5c3fab309101612902565b612cb7614c73565b80513390612cc58282614cb2565b612cd783600001518460200151614d34565b612cf35760405162461bcd60e51b81526004016106509061548d565b60408301516001600160a01b0316331480612d27575082600001516001600160a01b031683604001516001600160a01b0316145b612d595760405162461bcd60e51b815260206004820152600360248201526204332360ec1b6044820152606401610650565b600354606084015160405163f9839d8960e01b81526001600160a01b03918216600482015291169063f9839d899060240160206040518083038186803b158015612da257600080fd5b505afa158015612db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dda9190615249565b612e0c5760405162461bcd60e51b815260206004820152600360248201526243323160e81b6044820152606401610650565b6000612e2084600001518560200151610ae6565b509150508060011415612ecf5760a084015160608501516001600160a01b03166000908152600f6020526040902054612e5891614d28565b6060850180516001600160a01b039081166000908152600f6020818152604080842096909655845184168352600e8152858320549451909316825290915291909120541115612ecf5760405162461bcd60e51b815260206004820152600360248201526243333760e81b6044820152606401610650565b83516001600160a01b03166000908152600a6020908152604080832082880151845290915290819020606086015160a08701516080880151935162f976db60e41b815273__$d56df6d7767e6a78886764ada99b46cb82$__94630f976db094612f419490939092909190600401615520565b60006040518083038186803b158015612f5957600080fd5b505af4158015612f6d573d6000803e3d6000fd5b5050600654606087015160408089015160a08a0151915163dd2c99f760e01b81526001600160a01b03909416955063dd2c99f79450612fb193909190600401615456565b600060405180830381600087803b158015612fcb57600080fd5b505af1158015612fdf573d6000803e3d6000fd5b5050505060608481015160408087015187516020808a015160808b015160a08c0151865192835292820152938401526001600160a01b03938416949184169316917f9393273d1233277690c6b746d1bc5805536d5da0c32865cbd8867b6bd49581919101612902565b613050614c73565b8051339061305e8282614cb2565b61307083600001518460200151614d34565b61308c5760405162461bcd60e51b81526004016106509061548d565b6000806130a185600001518660200151610ae6565b50915091506130b38260000151614d61565b1561319057600082600001516000815181106130df57634e487b7160e01b600052603260045260246000fd5b60200260200101519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561312257600080fd5b505afa158015613136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315a919061529b565b421061318e5760405162461bcd60e51b815260206004820152600360248201526221991960e91b6044820152606401610650565b505b80600114156131e25760a085015160608601516001600160a01b03166000908152600f60205260409020546131c491614db3565b60608601516001600160a01b03166000908152600f60205260409020555b84516001600160a01b03166000908152600a6020908152604080832082890151845290915290819020606087015160a0880151608089015193516320a049cb60e01b815273__$d56df6d7767e6a78886764ada99b46cb82$__946320a049cb946132559490939092909190600401615520565b60006040518083038186803b15801561326d57600080fd5b505af4158015613281573d6000803e3d6000fd5b505060065460608801516040808a015160a08b0151915163fa93b2a560e01b81526001600160a01b03909416955063fa93b2a594506132c593909190600401615456565b600060405180830381600087803b1580156132df57600080fd5b505af11580156132f3573d6000803e3d6000fd5b5050505060608581015160408088015188516020808b015160808c015160a08d0151865192835292820152938401526001600160a01b03938416949184169316917f1346acd332f6678a7292aeda9a24cf74b9d97ef217344c674d246c86e1ba6e9b910160405180910390a45050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260018251600a8111156133bb57634e487b7160e01b600052602160045260246000fd5b146133ed5760405162461bcd60e51b8152602060048201526002602482015261104d60f21b6044820152606401610650565b60208201516001600160a01b031661251a5760405162461bcd60e51b8152602060048201526002602482015261413560f01b6044820152606401610650565b613434614c73565b805133906134428282614cb2565b61345483600001518460200151614d34565b6134705760405162461bcd60e51b81526004016106509061548d565b600354606084015160405163ab0fed6960e01b81526001600160a01b03918216600482015291169063ab0fed699060240160206040518083038186803b1580156134b957600080fd5b505afa1580156134cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f19190615249565b6135235760405162461bcd60e51b815260206004820152600360248201526243323360e81b6044820152606401610650565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b15801561356557600080fd5b505afa158015613579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359d919061529b565b42106135d15760405162461bcd60e51b815260206004820152600360248201526210cc8d60ea1b6044820152606401610650565b83516001600160a01b03166000908152600a6020908152604080832082880151845290915290819020606086015160a087015160808801519351633350755960e01b815273__$d56df6d7767e6a78886764ada99b46cb82$__946333507559946136449490939092909190600401615520565b60006040518083038186803b15801561365c57600080fd5b505af4158015613670573d6000803e3d6000fd5b5050505060408481015160a08601519151636481ad5d60e01b81526001600160a01b0391821660048201526024810192909252821690636481ad5d90604401600060405180830381600087803b1580156136c957600080fd5b505af11580156136dd573d6000803e3d6000fd5b5050505060608481015160408087015187516020808a015160808b015160a08c0151865192835292820152938401526001600160a01b03938416949184169316917f1d239a426d8064ced32ea1b1900a89c32d89f8bef5aa26f3a9609cd1aa08281b9101612902565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260028251600a81111561379b57634e487b7160e01b600052602160045260246000fd5b146137cd5760405162461bcd60e51b8152602060048201526002602482015261209b60f11b6044820152606401610650565b60208201516001600160a01b031661251a5760405162461bcd60e51b8152602060048201526002602482015261413760f01b6044820152606401610650565b613814614c73565b805133906138228282614cb2565b61383483600001518460200151614d34565b6138505760405162461bcd60e51b81526004016106509061548d565b60408301516001600160a01b0316331480613884575082600001516001600160a01b031683604001516001600160a01b0316145b6138b65760405162461bcd60e51b815260206004820152600360248201526243323560e81b6044820152606401610650565b600083606001519050806001600160a01b031663ade6e2aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156138f857600080fd5b505afa15801561390c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613930919061529b565b42106139645760405162461bcd60e51b815260206004820152600360248201526221991b60e91b6044820152606401610650565b83516001600160a01b03166000908152600a6020908152604080832082880151845290915290819020606086015160a08701516080880151935163d91300bb60e01b815273__$d56df6d7767e6a78886764ada99b46cb82$__9463d91300bb946139d79490939092909190600401615520565b60006040518083038186803b1580156139ef57600080fd5b505af4158015613a03573d6000803e3d6000fd5b5050505060408481015160a0860151915163149b472760e11b81526001600160a01b03918216600482015260248101929092528216906329368e4e90604401600060405180830381600087803b158015613a5c57600080fd5b505af1158015613a70573d6000803e3d6000fd5b5050505060608481015160408087015187516020808a015160808b015160a08c0151865192835292820152938401526001600160a01b03938416949184169316917f0dffc90fa358ffd8e04e4b0801f2a089ba67a67ba309d7105ecf8ee4e94e61189101612902565b604080516060810182526000808252602082018190529181019190915260088251600a811115613b1957634e487b7160e01b600052602160045260246000fd5b14613b4c5760405162461bcd60e51b815260206004820152600360248201526241313360e81b6044820152606401610650565b60408201516001600160a01b0316613b8c5760405162461bcd60e51b8152602060048201526003602482015262104c4d60ea1b6044820152606401610650565b506040805160608082018352838301516001600160a01b0390811683529084015116602082015260a0909201519082015290565b602081015160035460405163ab0fed6960e01b81526001600160a01b0380841660048301529091169063ab0fed699060240160206040518083038186803b158015613c0a57600080fd5b505afa158015613c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c429190615249565b613c745760405162461bcd60e51b815260206004820152600360248201526243323760e81b6044820152606401610650565b600080600080613c8385611f80565b935093509350935080421015613cc15760405162461bcd60e51b815260206004820152600360248201526208664760eb1b6044820152606401610650565b6000613cd58760200151886040015161094e565b604080890151905163149b472760e11b815233600482015260248101919091529091506001600160a01b038716906329368e4e90604401600060405180830381600087803b158015613d2657600080fd5b505af1158015613d3a573d6000803e3d6000fd5b5050600654895160405163fa93b2a560e01b81526001600160a01b03909216935063fa93b2a59250613d73918991908690600401615456565b600060405180830381600087803b158015613d8d57600080fd5b505af1158015613da1573d6000803e3d6000fd5b505088516020808b01516040808d015181516001600160a01b038d8116825294810191909152908101879052928216945033935016907f18fd144d7dbcbaa6f00fd47a84adc7dc3cc64a326ffa2dc7691a25e3837dba039060600160405180910390a450505050505050565b604080516060810182526000808252602082018190529181019190915260078251600a811115613e4d57634e487b7160e01b600052602160045260246000fd5b14613e805760405162461bcd60e51b815260206004820152600360248201526241313560e81b6044820152606401610650565b60208201516001600160a01b0316613ec05760405162461bcd60e51b815260206004820152600360248201526220989b60e91b6044820152606401610650565b60408201516001600160a01b0316613f005760405162461bcd60e51b815260206004820152600360248201526241313760e81b6044820152606401610650565b604051806060016040528083602001516001600160a01b031681526020018360800151815260200183604001516001600160a01b03168152509050919050565b80513390613f4e8282614cb2565b613f6083600001518460200151614d34565b613f7c5760405162461bcd60e51b81526004016106509061548d565b600080613f9185600001518660200151610ae6565b5091509150600080613fa68460000151614d61565b90506000613fb78560200151614d61565b90508180613fc25750805b613ff45760405162461bcd60e51b815260206004820152600360248201526204333360ec1b6044820152606401610650565b8161402b57846020015160008151811061401e57634e487b7160e01b600052603260045260246000fd5b6020026020010151614055565b8451805160009061404c57634e487b7160e01b600052603260045260246000fd5b60200260200101515b92508015614145576000856020015160008151811061408457634e487b7160e01b600052603260045260246000fd5b60200260200101519050806001600160a01b03166329368e4e600660009054906101000a90046001600160a01b031688608001516000815181106140d857634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016141119291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b15801561412b57600080fd5b505af115801561413f573d6000803e3d6000fd5b50505050505b505060008060008061415685611f80565b9350935093509350804210156141945760405162461bcd60e51b815260206004820152600360248201526243333160e81b6044820152606401610650565b60055460405163cd43fbfb60e01b815260009182916001600160a01b039091169063cd43fbfb906141cb908c908c906004016154d9565b604080518083038186803b1580156141e257600080fd5b505afa1580156141f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061421a91906152b3565b91509150806142515760405162461bcd60e51b815260206004820152600360248201526221999960e91b6044820152606401610650565b600a60008d600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008d602001518152602001908152602001600020600080820160006142a09190614e73565b6142ae600183016000614e73565b6142bc600283016000614e73565b6142ca600383016000614e73565b6142d8600483016000614e73565b6142e6600583016000614e73565b5050876001141561432e576001600160a01b0386166000908152600f60205260409020546143149083614db3565b6001600160a01b0387166000908152600f60205260409020555b6006546040808e0151905163fa93b2a560e01b81526001600160a01b039092169163fa93b2a591614366918a91908790600401615456565b600060405180830381600087803b15801561438057600080fd5b505af1158015614394573d6000803e3d6000fd5b5050505060208c8101516040808f01518f518251848152948501879052929390926001600160a01b03808516939116917f94313bcf8d09aa1c7f6bf11b64131c7b49a16e1f90231d37e2e979495fb1988c910160405180910390a35050505050505050505050505050565b604080516080810182526000808252602082018190529181018290526060810191909152600a8251600a81111561444657634e487b7160e01b600052602160045260246000fd5b146144795760405162461bcd60e51b815260206004820152600360248201526208262760eb1b6044820152606401610650565b60208201516001600160a01b03166144b95760405162461bcd60e51b815260206004820152600360248201526241313960e81b6044820152606401610650565b60408201516001600160a01b03166144f95760405162461bcd60e51b815260206004820152600360248201526204132360ec1b6044820152606401610650565b604051806080016040528083602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836080015181526020018360a001518152509050919050565b61454b614c73565b61455d81600001518260400151614d34565b6145795760405162461bcd60e51b81526004016106509061548d565b60008060008061459185600001518660400151611657565b9350935093509350826145cc5760405162461bcd60e51b815260206004820152600360248201526243333360e81b6044820152606401610650565b60006145ed6305f5e1006109e785896060015161197590919063ffffffff16565b905060006146348760600151876060015160008151811061461e57634e487b7160e01b600052603260045260246000fd5b6020026020010151614db390919063ffffffff16565b11156146985781614664828760a0015160008151811061461e57634e487b7160e01b600052603260045260246000fd5b10156146985760405162461bcd60e51b815260206004820152600360248201526210cccd60ea1b6044820152606401610650565b845180516000906146b957634e487b7160e01b600052603260045260246000fd5b6020908102919091010151606087015160405163149b472760e11b815233600482015260248101919091526001600160a01b03909116906329368e4e90604401600060405180830381600087803b15801561471357600080fd5b505af1158015614727573d6000803e3d6000fd5b505087516001600160a01b03166000908152600a60209081526040808320818c0151845290915280822090890151805173__$d56df6d7767e6a78886764ada99b46cb82$__95506320a049cb94509192909161479357634e487b7160e01b600052603260045260246000fd5b60200260200101518460006040518563ffffffff1660e01b81526004016147bd9493929190615520565b60006040518083038186803b1580156147d557600080fd5b505af41580156147e9573d6000803e3d6000fd5b505087516001600160a01b03166000908152600a60209081526040808320818c0151845290915281208851805173__$d56df6d7767e6a78886764ada99b46cb82$__955063d91300bb94509192909161485257634e487b7160e01b600052603260045260246000fd5b6020026020010151896060015160006040518563ffffffff1660e01b81526004016148809493929190615520565b60006040518083038186803b15801561489857600080fd5b505af41580156148ac573d6000803e3d6000fd5b5050505061491481600f600088604001516000815181106148dd57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054614db390919063ffffffff16565b600f6000876040015160008151811061493d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600660009054906101000a90046001600160a01b03166001600160a01b031663fa93b2a586604001516000815181106149b257634e487b7160e01b600052603260045260246000fd5b60200260200101518860200151846040518463ffffffff1660e01b81526004016149de93929190615456565b600060405180830381600087803b1580156149f857600080fd5b505af1158015614a0c573d6000803e3d6000fd5b5050505085600001516001600160a01b031686602001516001600160a01b0316336001600160a01b03167f32a13c13f21a29361ca0058d0c1dd3d937fbef0d7734d6049e353f2f83ad1c0386858b606001518c60400151604051614a89949392919093845260208401929092526040830152606082015260800190565b60405180910390a4505050505050565b60408051808201909152600081526060602082015260098251600a811115614ad157634e487b7160e01b600052602160045260246000fd5b14614b045760405162461bcd60e51b815260206004820152600360248201526220991960e91b6044820152606401610650565b60408201516001600160a01b0316614b445760405162461bcd60e51b815260206004820152600360248201526241323360e81b6044820152606401610650565b50604080518082018252908201516001600160a01b0316815260e090910151602082015290565b614b73614c73565b8051600854600160b01b900460ff1615614bc157614b9081614dbf565b614bc15760405162461bcd60e51b8152602060048201526002602482015261433360f01b6044820152606401610650565b815160208301516040516309c23da560e41b81526001600160a01b0390921691639c23da5091614bf69133919060040161542a565b600060405180830381600087803b158015614c1057600080fd5b505af1158015614c24573d6000803e3d6000fd5b5050505081600001516001600160a01b0316336001600160a01b03167f8750bdaf6e88201790ee2765fea3ac73b514a52658c818723a30de91029ad0008460200151604051610942919061547a565b600854600160a01b900460ff1615610ad25760405162461bcd60e51b815260206004820152600260248201526110cd60f21b6044820152606401610650565b806001600160a01b0316826001600160a01b03161480614cf757506001600160a01b038082166000908152600b602090815260408083209386168352929052205460ff165b6115005760405162461bcd60e51b8152602060048201526002602482015261219b60f11b6044820152606401610650565b60006109ed828461559f565b600080821180156109ed5750506001600160a01b0391909116600090815260096020526040902054101590565b60008082511180156109f0575060006001600160a01b031682600081518110614d9a57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316141592915050565b60006109ed82846156e1565b6003546040516351572a2d60e11b81526001600160a01b038381166004830152600092169063a2ae545a9060240160206040518083038186803b158015614e0557600080fd5b505afa158015614e19573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f09190615249565b6040518060c001604052806060815260200160608152602001606081526020016060815260200160608152602001606081525090565b5080546000825590600052602060002090810190610eab91905b80821115614ea15760008155600101614e8d565b5090565b8035614eb08161573f565b919050565b600082601f830112614ec5578081fd5b813567ffffffffffffffff811115614edf57614edf615729565b614ef2601f8201601f191660200161556e565b818152846020838601011115614f06578283fd5b816020850160208301379081016020019190915292915050565b8035600b8110614eb057600080fd5b60006101008284031215614f41578081fd5b614f49615544565b9050614f5482614f20565b8152614f6260208301614ea5565b6020820152614f7360408301614ea5565b6040820152614f8460608301614ea5565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013567ffffffffffffffff811115614fc157600080fd5b614fcd84828501614eb5565b60e08301525092915050565b600060208284031215614fea578081fd5b8135614ff58161573f565b9392505050565b60006020828403121561500d578081fd5b8151614ff58161573f565b6000806040838503121561502a578081fd5b82356150358161573f565b915060208301356150458161573f565b809150509250929050565b60008060008060808587031215615065578182fd5b84356150708161573f565b935060208501356150808161573f565b925060408501356150908161573f565b9396929550929360600135925050565b60008060008060008060c087890312156150b8578182fd5b86516150c38161573f565b60208801519096506150d48161573f565b60408801519095506150e58161573f565b80945050606087015192506080870151915060a087015161510581615754565b809150509295509295509295565b60008060408385031215615125578182fd5b82356151308161573f565b9150602083013561504581615754565b60008060408385031215615152578182fd5b823561515d8161573f565b946020939093013593505050565b6000602080838503121561517d578182fd5b823567ffffffffffffffff80821115615194578384fd5b818501915085601f8301126151a7578384fd5b8135818111156151b9576151b9615729565b8060051b6151c885820161556e565b8281528581019085870183870188018b10156151e2578889fd5b8893505b8484101561521f578035868111156151fc57898afd5b61520a8c8a838b0101614f2f565b845250600193909301929187019187016151e6565b509998505050505050505050565b60006020828403121561523e578081fd5b8135614ff581615754565b60006020828403121561525a578081fd5b8151614ff581615754565b600080600060608486031215615279578081fd5b835161528481615754565b602085015160409095015190969495509392505050565b6000602082840312156152ac578081fd5b5051919050565b600080604083850312156152c5578182fd5b82519150602083015161504581615754565b6000815180845260208085019450808401835b8381101561530f5781516001600160a01b0316875295820195908201906001016152ea565b509495945050505050565b6000815180845260208085019450808401835b8381101561530f5781518752958201959082019060010161532d565b60008151808452815b8181101561536e57602081850181015186830182015201615352565b8181111561537f5782602083870101525b50601f01601f19169290920160200192915050565b6000815160c084526153a960c08501826152d7565b9050602083015184820360208601526153c282826152d7565b915050604083015184820360408601526153dc82826152d7565b915050606083015184820360608601526153f6828261531a565b91505060808301518482036080860152615410828261531a565b91505060a083015184820360a086015261060d828261531a565b6001600160a01b038316815260406020820181905260009061544e90830184615349565b949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020815260006109ed6020830184615349565b60208082526003908201526243333560e81b604082015260600190565b602080825260029082015261433960f01b604082015260600190565b6020815260006109ed6020830184615394565b6040815260006154ec6040830185615394565b90508260208301529392505050565b60608152600061550e6060830186615394565b60208301949094525060400152919050565b9384526001600160a01b039290921660208401526040830152606082015260800190565b604051610100810167ffffffffffffffff8111828210171561556857615568615729565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561559757615597615729565b604052919050565b600082198211156155b2576155b2615713565b500190565b6000826155d257634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156156125781600019048211156155f8576155f8615713565b8085161561560557918102915b93841c93908002906155dc565b509250929050565b60006109ed8383600082615630575060016109f0565b8161563d575060006109f0565b8160018114615653576002811461565d57615679565b60019150506109f0565b60ff84111561566e5761566e615713565b50506001821b6109f0565b5060208310610133831016604e8410600b841016171561569c575081810a6109f0565b6156a683836155d7565b80600019048211156156ba576156ba615713565b029392505050565b60008160001904831182151516156156dc576156dc615713565b500290565b6000828210156156f3576156f3615713565b500390565b600060001982141561570c5761570c615713565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610eab57600080fd5b8015158114610eab57600080fdfea26469706673582212200d12ef0c7c89aa049d2e82749da6cd12726ed2f8c549b14fe43cb11beb91fdf064736f6c63430008040033",
    "linkReferences": {
        "contracts/libs/LibMarginVault.sol": {
            "LibMarginVault": [
                {
                    "length": 20,
                    "start": 10340
                },
                {
                    "length": 20,
                    "start": 11277
                },
                {
                    "length": 20,
                    "start": 12198
                },
                {
                    "length": 20,
                    "start": 12986
                },
                {
                    "length": 20,
                    "start": 13993
                },
                {
                    "length": 20,
                    "start": 14908
                },
                {
                    "length": 20,
                    "start": 18411
                },
                {
                    "length": 20,
                    "start": 18602
                }
            ]
        }
    },
    "deployedLinkReferences": {
        "contracts/libs/LibMarginVault.sol": {
            "LibMarginVault": [
                {
                    "length": 20,
                    "start": 10194
                },
                {
                    "length": 20,
                    "start": 11131
                },
                {
                    "length": 20,
                    "start": 12052
                },
                {
                    "length": 20,
                    "start": 12840
                },
                {
                    "length": 20,
                    "start": 13847
                },
                {
                    "length": 20,
                    "start": 14762
                },
                {
                    "length": 20,
                    "start": 18265
                },
                {
                    "length": 20,
                    "start": 18456
                }
            ]
        }
    }
}
