{
  "contractName": "VGInstantiator",
  "sourceName": "contracts/VGInstantiator.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_partitionInstantiatorAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_mmInstantiatorAddress",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "MemoryWriten",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_mmInstance",
          "type": "uint256"
        }
      ],
      "name": "PartitionDivergenceFound",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_challenger",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_claimer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_roundDuration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_machineAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_initialHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_claimerFinalHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_finalTime",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_partitionInstance",
          "type": "uint256"
        }
      ],
      "name": "VGCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "enum VGInterface.state",
          "name": "_finalState",
          "type": "uint8"
        }
      ],
      "name": "VGFinished",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "claimVictoryByTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getCurrentState",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getCurrentStateDeadline",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "time",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_roundDuration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_timeToStartMachine",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_partitionSize",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maxCycle",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_picoSecondsToRunInsn",
          "type": "uint256"
        }
      ],
      "name": "getMaxInstanceDuration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "currentNonce",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getPartitionGameIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getPartitionQuerySize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "internalType": "address",
          "name": "_challenger",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_claimer",
          "type": "address"
        },
        {
          "internalType": "contract MachineInterface",
          "name": "_machine",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_initialHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_claimerFinalHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_hashBeforeDivergence",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_hashAfterDivergence",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_currentState",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "_uintValues",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getSubInstances",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_addresses",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_indices",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_challenger",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_claimer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_roundDuration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_machineAddress",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_initialHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_claimerFinalHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_finalTime",
          "type": "uint256"
        }
      ],
      "name": "instantiate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "isActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "isConcerned",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "x",
          "type": "uint256"
        }
      ],
      "name": "log2OverTwo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "settleVerificationGame",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "startMachineRunChallenge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsFinishedChallengerWon",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "stateIsFinishedClaimerWon",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "winByPartitionTimeout",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526000805534801561001457600080fd5b50604051612b46380380612b468339818101604052604081101561003757600080fd5b508051602090910151600380546001600160a01b039384166001600160a01b03199182161790915560048054939092169216919091179055612ac88061007e6000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c80636cc9f17e116100ad578063b6b5c31911610071578063b6b5c319146103de578063bfa69ed8146103fb578063c526656c14610418578063cd3784e7146104dd578063daaadf4e146104fa57610120565b80636cc9f17e1461029557806373df1612146102b257806382afd23b14610385578063a2dc7973146103a2578063a703df28146103c157610120565b806326987b60116100f457806326987b6014610201578063370f31aa146102095780633d46b8191461023e578063429fc0181461025b5780635748c1301461027857610120565b80624463861461012557806301ff62ab146101545780630c91927b1461019457806320b73870146101b1575b600080fd5b6101426004803603602081101561013b57600080fd5b5035610517565b60408051918252519081900360200190f35b6101806004803603604081101561016a57600080fd5b50803590602001356001600160a01b03166105a4565b604080519115158252519081900360200190f35b610142600480360360208110156101aa57600080fd5b50356105ef565b610142600480360360e08110156101c757600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359091169060808101359060a08101359060c0013561064c565b6101426108e8565b610142600480360360a081101561021f57600080fd5b50803590602081013590604081013590606081013590608001356108ee565b6101426004803603602081101561025457600080fd5b5035610922565b6101426004803603602081101561027157600080fd5b50356109cc565b6101426004803603602081101561028e57600080fd5b5035610b14565b610180600480360360208110156102ab57600080fd5b5035610cb0565b6102de600480360360408110156102c857600080fd5b50803590602001356001600160a01b0316610d22565b604051808a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b0316815260200187815260200186815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610369578181015183820152602001610351565b505050509050019a505050505050505050505060405180910390f35b6101806004803603602081101561039b57600080fd5b50356110cc565b6103bf600480360360208110156103b857600080fd5b50356110e1565b005b6103bf600480360360208110156103d757600080fd5b5035611308565b610180600480360360208110156103f457600080fd5b5035611a4f565b6103bf6004803603602081101561041157600080fd5b5035611a9d565b6104446004803603604081101561042e57600080fd5b50803590602001356001600160a01b0316611cb1565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610488578181015183820152602001610470565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104c75781810151838201526020016104af565b5050505090500194505050505060405180910390f35b6103bf600480360360208110156104f357600080fd5b5035611e5c565b6101426004803603602081101561051057600080fd5b50356122cb565b6003546000828152600560209081526040808320600901548151622231c360e11b81526004810191909152905192936001600160a01b0316926244638692602480840193919291829003018186803b15801561057257600080fd5b505afa158015610586573d6000803e3d6000fd5b505050506040513d602081101561059c57600080fd5b505192915050565b6000828152600560205260408120546001600160a01b03838116911614806105e857506000838152600560205260409020600101546001600160a01b038381169116145b9392505050565b60035460008281526005602090815260408083206009015481516341fde16f60e01b81526004810191909152905192936001600160a01b0316926341fde16f92602480840193919291829003018186803b15801561057257600080fd5b600080821161068c5760405162461bcd60e51b81526004018080602001828103825260248152602001806129a86024913960400191505060405180910390fd5b6000805481526005602052604080822080546001600160a01b03808d166001600160a01b03199283161790925583548452919092206001018054928a16929091169190911790556106dc826122cb565b6000805481526005602081815260408084206004958c02860160029091015583548452808420600390810180546001600160a01b03808e166001600160a01b0319909216919091179091558554865282862087018b905585548652828620909401899055845485528185206006018890558454855281852042600790910155548151633562820d60e01b81528e8516968101969096528c84166024870152604486018a90526064860189905260848601889052600a60a487015260c486018c90529051921693633562820d9360e480830194928390030190829087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050506040513d60208110156107ef57600080fd5b5051600080548152600560205260408082206009019290925580548152908120600d01805460ff19169055547fd4ad9a0f11913813f7818801ad85d597c0dfd1d2c01bcb1a02f29c6d6544fdd5908989610848866122cb565b600080548152600560209081526040918290206009015482519687526001600160a01b0395861691870191909152928416858201526004918c02919091016060850152918916608084015260a0830188905260c0830187905260e0830186905261010083015251908190036101200190a1506000805481526001602081905260408220805460ff1916821790558154908101909155979650505050505050565b60005481565b600080610900600088888888886122fc565b90506000610913600189898989896122fc565b91909101979650505050505050565b6000818060005411610969576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610972816110cc565b6109b4576040805162461bcd60e51b815260206004820152600e60248201526d496e64657820696e61637469766560901b604482015290519081900360640190fd5b60008381526002602052604090205491505b50919050565b6000818060005411610a13576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610a1b612910565b60008481526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff90911690811115610ae557fe5b6003811115610af057fe5b815250509050610b068482604001516028612449565b60e090910151019392505050565b6000818060005411610b5b576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000838152600560205260408120600d015460ff166003811115610b7b57fe5b1415610b99576c2bb0b4ba2830b93a34ba34b7b760991b91506109c6565b60016000848152600560205260409020600d015460ff166003811115610bbb57fe5b1415610be15774576169744d656d6f727950726f766556616c75657360581b91506109c6565b60026000848152600560205260409020600d015460ff166003811115610c0357fe5b1415610c2657712334b734b9b432b221b630b4b6b2b92bb7b760711b91506109c6565b60036000848152600560205260409020600d015460ff166003811115610c4857fe5b1415610c6e57742334b734b9b432b221b430b63632b733b2b92bb7b760591b91506109c6565b6040805162461bcd60e51b8152602060048201526012602482015271556e7265636f676e697a656420737461746560701b604482015290519081900360640190fd5b6000818060005411610cf7576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b60025b6000848152600560205260409020600d015460ff166003811115610d1a57fe5b149392505050565b60008060008060008060008060608a8060005411610d75576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610d7d612910565b60008d81526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff90911690811115610e4757fe5b6003811115610e5257fe5b90525060408051600580825260c08201909252919250606091906020820160a0803683370190505090508160c0015181600081518110610e8e57fe5b602002602001018181525050610f41826101a0015183604001516028600360009054906101000a90046001600160a01b03166001600160a01b03166341fde16f8761012001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f0857600080fd5b505afa158015610f1c573d6000803e3d6000fd5b505050506040513d6020811015610f3257600080fd5b505160c08701516101f46122fc565b8260e001510181600181518110610f5457fe5b60200260200101818152505081610100015181600281518110610f7357fe5b60200260200101818152505081610120015181600381518110610f9257fe5b60200260200101818152505081610140015181600481518110610fb157fe5b6020908102919091010152600080836101a001516003811115610fd057fe5b1415610fe957506c2bb0b4ba2830b93a34ba34b7b760991b5b6001836101a001516003811115610ffc57fe5b141561101d575074576169744d656d6f727950726f766556616c75657360581b5b6002836101a00151600381111561103057fe5b141561104e5750712334b734b9b432b221b630b4b6b2b92bb7b760711b5b6003836101a00151600381111561106157fe5b14156110825750742334b734b9b432b221b430b63632b733b2b92bb7b760591b5b82600001518360200151846060015185608001518660a0015187610160015188610180015187899c509c509c509c509c509c509c509c509c50505050509295985092959850929598565b60009081526001602052604090205460ff1690565b808060005411611126576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260409020600101546001600160a01b0316338114611190576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600083815260056020908152604091829020600d810154600282015460035460099093015485516341fde16f60e01b81526004810191909152945161124c9560ff9093169491936028936001600160a01b03909116926341fde16f92602480840193829003018186803b15801561120657600080fd5b505afa15801561121a573d6000803e3d6000fd5b505050506040513d602081101561123057600080fd5b50516000888152600560205260409020600601546101f46122fc565b60008481526005602052604090206007015401421161129c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806129f0602e913960400191505060405180910390fd5b60016000848152600560205260409020600d015460ff1660038111156112be57fe5b146112fa5760405162461bcd60e51b81526004018080602001828103825260258152602001806129836025913960400191505060405180910390fd5b611303836126fa565b505050565b80806000541161134d576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260409020546001600160a01b03163381146113b4576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b60016000848152600560205260409020600d015460ff1660038111156113d657fe5b146114125760405162461bcd60e51b81526004018080602001828103825260258152602001806129836025913960400191505060405180910390fd5b600083815260056020908152604091829020600801546004805484516343d4b78b60e01b8152918201839052935191936001600160a01b0316926343d4b78b92602480840193829003018186803b15801561146c57600080fd5b505afa158015611480573d6000803e3d6000fd5b505050506040513d602081101561149657600080fd5b50516114d35760405162461bcd60e51b8152600401808060200182810382526023815260200180612a506023913960400191505060405180910390fd5b600480546040805163f154f91d60e01b815292830184905251606092839283926001600160a01b039091169163f154f91d916024808301926000929190829003018186803b15801561152457600080fd5b505afa158015611538573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052606081101561156157600080fd5b810190808051604051939291908464010000000082111561158157600080fd5b90830190602082018581111561159657600080fd5b82518660208202830111640100000000821117156115b357600080fd5b82525081516020918201928201910280838360005b838110156115e05781810151838201526020016115c8565b505050509050016040526020018051604051939291908464010000000082111561160957600080fd5b90830190602082018581111561161e57600080fd5b825186602082028301116401000000008211171561163b57600080fd5b82525081516020918201928201910280838360005b83811015611668578181015183820152602001611650565b505050509050016040526020018051604051939291908464010000000082111561169157600080fd5b9083019060208201858111156116a657600080fd5b82518660208202830111640100000000821117156116c357600080fd5b82525081516020918201928201910280838360005b838110156116f05781810151838201526020016116d8565b50505050905001604052505050925092509250600080600560008a815260200190815260200160002060030160009054906101000a90046001600160a01b03166001600160a01b0316637718d4c88686866040518463ffffffff1660e01b815260040180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015611798578181015183820152602001611780565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156117d75781810151838201526020016117bf565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156118165781810151838201526020016117fe565b5050505090500196505050505050506040805180830381600087803b15801561183e57600080fd5b505af1158015611852573d6000803e3d6000fd5b505050506040513d604081101561186857600080fd5b5080516020909101516004805460408051631f6aea2b60e11b81529283018b9052519395509193506001600160a01b0390911691633ed5d4569160248082019260009290919082900301818387803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b50506004805460408051634b7a14dd60e11b81529283018b9052516001600160a01b0390911693506396f429ba92506024808301926020929190829003018186803b15801561192557600080fd5b505afa158015611939573d6000803e3d6000fd5b505050506040513d602081101561194f57600080fd5b505161198c5760405162461bcd60e51b81526004018080602001828103825260248152602001806129cc6024913960400191505060405180910390fd5b60ff821615801561199d5750845181145b8015611a2d5750600089815260056020908152604091829020600c0154600480548451630241916160e61b81529182018b9052935191936001600160a01b031692639064584092602480840193829003018186803b1580156119fe57600080fd5b505afa158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b505114155b15611a3b57611a3b896127c9565b611a44896126fa565b505050505050505050565b6000818060005411611a96576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6003610cfa565b808060005411611ae2576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260408120600d015460ff166003811115611b0257fe5b14611b54576040805162461bcd60e51b815260206004820152601d60248201527f53746174652073686f756c642062652057616974506172746974696f6e000000604482015290519081900360640190fd5b6000828152600560209081526040918290206009015460035483516332a3a14f60e11b815260048101839052935191936001600160a01b0390911692636547429e92602480840193829003018186803b158015611bb057600080fd5b505afa158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b505115611bf057611bea836127c9565b50611cad565b6003546040805163d0a068cf60e01b81526004810184905290516001600160a01b039092169163d0a068cf91602480820192602092909190829003018186803b158015611c3c57600080fd5b505afa158015611c50573d6000803e3d6000fd5b505050506040513d6020811015611c6657600080fd5b505115611c7657611bea836126fa565b60405162461bcd60e51b8152600401808060200182810382526032815260200180612a1e6032913960400191505060405180910390fd5b5050565b6060808080600080878152600560205260409020600d015460ff166003811115611cd757fe5b1415611d815760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060035484519293506001600160a01b031691849150600090611d3757fe5b6001600160a01b03909216602092830291909101820152600087815260059091526040812060090154825190918391611d6c57fe5b60209081029190910101529092509050611e55565b60016000878152600560205260409020600d015460ff166003811115611da357fe5b1415611e385760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060045484519293506001600160a01b031691849150600090611e0357fe5b6001600160a01b03909216602092830291909101820152600087815260059091526040812060080154825190918391611d6c57fe5b505060408051600080825260208201908152818301909252925090505b9250929050565b808060005411611ea1576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b60008281526002602052604081208054600101905582906000848152600560205260409020600d015460ff166003811115611ed857fe5b14611f2a576040805162461bcd60e51b815260206004820152601d60248201527f53746174652073686f756c642062652057616974506172746974696f6e000000604482015290519081900360640190fd5b600354600084815260056020908152604091829020600901548251631d9f2d7760e01b8152600481019190915291516001600160a01b0390931692631d9f2d77926024808201939291829003018186803b158015611f8757600080fd5b505afa158015611f9b573d6000803e3d6000fd5b505050506040513d6020811015611fb157600080fd5b5051612004576040805162461bcd60e51b815260206004820152601a60248201527f446976657267656e63652073686f756c6420626520666f756e64000000000000604482015290519081900360640190fd5b600083815260056020908152604080832060090154600354825163326ff2f560e01b81526004810183905292519194936001600160a01b039091169263326ff2f59260248083019392829003018186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d602081101561208b57600080fd5b5051600086815260056020908152604091829020600a0183905560035482516360696f8160e01b8152600481018790526024810185905292519394506001600160a01b0316926360696f81926044808201939291829003018186803b1580156120f357600080fd5b505afa158015612107573d6000803e3d6000fd5b505050506040513d602081101561211d57600080fd5b5051600086815260056020908152604091829020600b019290925560035481516360696f8160e01b81526004810186905260018501602482015291516001600160a01b03909116926360696f819260448082019391829003018186803b15801561218657600080fd5b505afa15801561219a573d6000803e3d6000fd5b505050506040513d60208110156121b057600080fd5b50516000868152600560209081526040808320600c810194909455600480548554600b909601548351631140bc8f60e31b815230938101939093526001600160a01b039687166024840152604483015291519490911693638a05e47893606480840194938390030190829087803b15801561222a57600080fd5b505af115801561223e573d6000803e3d6000fd5b505050506040513d602081101561225457600080fd5b50516000868152600560209081526040808320600881018590556009810193909355426007840155600d909201805460ff1916600117905581518881529081019290925280517fe6772c68f52fac01f8694176345ad126ec91d30c32f27a57e8d20c076c2b063d9281900390910190a15050505050565b60006101005b82156122e75760019290921c91600019016122d1565b60028160ff03816122f457fe5b049392505050565b60008087600381111561230b57fe5b14156123ac5760035460408051631b8798d560e11b8152600481018990526024810188905260448101879052606481018690526084810185905290516001600160a01b039092169163370f31aa9160a480820192602092909190829003018186803b15801561237957600080fd5b505afa15801561238d573d6000803e3d6000fd5b505050506040513d60208110156123a357600080fd5b5051905061243f565b60018760038111156123ba57fe5b14156124115760048054604080516384dfd44d60e01b815292830189905260248301889052516001600160a01b03909116916384dfd44d916044808301926020929190829003018186803b15801561237957600080fd5b600287600381111561241f57fe5b14806124365750600387600381111561243457fe5b145b15610c6e575060005b9695505050505050565b6000612453612910565b60008581526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff9091169081111561251d57fe5b600381111561252857fe5b9052509050600080868152600560205260409020600d015460ff16600381111561254e57fe5b14156125e15760e081015160035461012083015160408051630853f80360e31b81526004810192909252516001600160a01b039092169163429fc01891602480820192602092909190829003018186803b1580156125ab57600080fd5b505afa1580156125bf573d6000803e3d6000fd5b505050506040513d60208110156125d557600080fd5b50510391506105e89050565b60016000868152600560205260409020600d015460ff16600381111561260357fe5b141561269d57600480546101008301516040805163db1de41960e01b8152938401919091526024830187905260448301869052516001600160a01b039091169163db1de419916064808301926020929190829003018186803b15801561266857600080fd5b505afa15801561267c573d6000803e3d6000fd5b505050506040513d602081101561269257600080fd5b505191506105e89050565b60026000868152600560205260409020600d015460ff1660038111156126bf57fe5b14806126ea575060036000868152600560205260409020600d015460ff1660038111156126e857fe5b145b15610c6e57506000949350505050565b80806000541161273f576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6127488261283a565b6000828152600560205260409020600d0180546002919060ff19166001835b021790555060008281526005602052604090819020600d015490517f2b38fc22e74e632df708aa11ee5b00b21845d40c64ccf39fafc8ef018b82b9b19160ff1690808260038111156127b557fe5b815260200191505060405180910390a15050565b80806000541161280e576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6128178261283a565b6000828152600560205260409020600d0180546003919060ff1916600183612767565b80806000541161287f576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b600082815260056020818152604080842080546001600160a01b031990811682556001808301805483169055600280840188905560038401805490931690925560048301879055948201869055600682018690556007820186905560088201869055600a8201869055600b8201869055600c909101859055928252808420805460ff19169055919052812055611cad565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018290526101808101829052906101a08201529056fe53746174652073686f756c6420626520576169744d656d6f727950726f766556616c75657346696e616c2074696d65206d7573742062652067726561746572207468616e207a65726f5374617465206f66204d4d2073686f756c642062652046696e69736865645265706c61794475726174696f6e206f6620576169744d656d6f727950726f766556616c756573206d757374206265206f7665724661696c20746f2057696e4279506172746974696f6e54696d656f757420696e2063757272656e7420636f6e646974696f6e5374617465206f66204d4d2073686f756c642062652057616974696e675265706c6179496e646578206e6f7420696e7374616e74696174656400000000000000000000a2646970667358221220b0472aeb6d1fafba8da23af46b1f47be1f9e1e463238728f2f918c3ee872304964736f6c63430007040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101205760003560e01c80636cc9f17e116100ad578063b6b5c31911610071578063b6b5c319146103de578063bfa69ed8146103fb578063c526656c14610418578063cd3784e7146104dd578063daaadf4e146104fa57610120565b80636cc9f17e1461029557806373df1612146102b257806382afd23b14610385578063a2dc7973146103a2578063a703df28146103c157610120565b806326987b60116100f457806326987b6014610201578063370f31aa146102095780633d46b8191461023e578063429fc0181461025b5780635748c1301461027857610120565b80624463861461012557806301ff62ab146101545780630c91927b1461019457806320b73870146101b1575b600080fd5b6101426004803603602081101561013b57600080fd5b5035610517565b60408051918252519081900360200190f35b6101806004803603604081101561016a57600080fd5b50803590602001356001600160a01b03166105a4565b604080519115158252519081900360200190f35b610142600480360360208110156101aa57600080fd5b50356105ef565b610142600480360360e08110156101c757600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359091169060808101359060a08101359060c0013561064c565b6101426108e8565b610142600480360360a081101561021f57600080fd5b50803590602081013590604081013590606081013590608001356108ee565b6101426004803603602081101561025457600080fd5b5035610922565b6101426004803603602081101561027157600080fd5b50356109cc565b6101426004803603602081101561028e57600080fd5b5035610b14565b610180600480360360208110156102ab57600080fd5b5035610cb0565b6102de600480360360408110156102c857600080fd5b50803590602001356001600160a01b0316610d22565b604051808a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b0316815260200187815260200186815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610369578181015183820152602001610351565b505050509050019a505050505050505050505060405180910390f35b6101806004803603602081101561039b57600080fd5b50356110cc565b6103bf600480360360208110156103b857600080fd5b50356110e1565b005b6103bf600480360360208110156103d757600080fd5b5035611308565b610180600480360360208110156103f457600080fd5b5035611a4f565b6103bf6004803603602081101561041157600080fd5b5035611a9d565b6104446004803603604081101561042e57600080fd5b50803590602001356001600160a01b0316611cb1565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610488578181015183820152602001610470565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104c75781810151838201526020016104af565b5050505090500194505050505060405180910390f35b6103bf600480360360208110156104f357600080fd5b5035611e5c565b6101426004803603602081101561051057600080fd5b50356122cb565b6003546000828152600560209081526040808320600901548151622231c360e11b81526004810191909152905192936001600160a01b0316926244638692602480840193919291829003018186803b15801561057257600080fd5b505afa158015610586573d6000803e3d6000fd5b505050506040513d602081101561059c57600080fd5b505192915050565b6000828152600560205260408120546001600160a01b03838116911614806105e857506000838152600560205260409020600101546001600160a01b038381169116145b9392505050565b60035460008281526005602090815260408083206009015481516341fde16f60e01b81526004810191909152905192936001600160a01b0316926341fde16f92602480840193919291829003018186803b15801561057257600080fd5b600080821161068c5760405162461bcd60e51b81526004018080602001828103825260248152602001806129a86024913960400191505060405180910390fd5b6000805481526005602052604080822080546001600160a01b03808d166001600160a01b03199283161790925583548452919092206001018054928a16929091169190911790556106dc826122cb565b6000805481526005602081815260408084206004958c02860160029091015583548452808420600390810180546001600160a01b03808e166001600160a01b0319909216919091179091558554865282862087018b905585548652828620909401899055845485528185206006018890558454855281852042600790910155548151633562820d60e01b81528e8516968101969096528c84166024870152604486018a90526064860189905260848601889052600a60a487015260c486018c90529051921693633562820d9360e480830194928390030190829087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050506040513d60208110156107ef57600080fd5b5051600080548152600560205260408082206009019290925580548152908120600d01805460ff19169055547fd4ad9a0f11913813f7818801ad85d597c0dfd1d2c01bcb1a02f29c6d6544fdd5908989610848866122cb565b600080548152600560209081526040918290206009015482519687526001600160a01b0395861691870191909152928416858201526004918c02919091016060850152918916608084015260a0830188905260c0830187905260e0830186905261010083015251908190036101200190a1506000805481526001602081905260408220805460ff1916821790558154908101909155979650505050505050565b60005481565b600080610900600088888888886122fc565b90506000610913600189898989896122fc565b91909101979650505050505050565b6000818060005411610969576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610972816110cc565b6109b4576040805162461bcd60e51b815260206004820152600e60248201526d496e64657820696e61637469766560901b604482015290519081900360640190fd5b60008381526002602052604090205491505b50919050565b6000818060005411610a13576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610a1b612910565b60008481526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff90911690811115610ae557fe5b6003811115610af057fe5b815250509050610b068482604001516028612449565b60e090910151019392505050565b6000818060005411610b5b576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000838152600560205260408120600d015460ff166003811115610b7b57fe5b1415610b99576c2bb0b4ba2830b93a34ba34b7b760991b91506109c6565b60016000848152600560205260409020600d015460ff166003811115610bbb57fe5b1415610be15774576169744d656d6f727950726f766556616c75657360581b91506109c6565b60026000848152600560205260409020600d015460ff166003811115610c0357fe5b1415610c2657712334b734b9b432b221b630b4b6b2b92bb7b760711b91506109c6565b60036000848152600560205260409020600d015460ff166003811115610c4857fe5b1415610c6e57742334b734b9b432b221b430b63632b733b2b92bb7b760591b91506109c6565b6040805162461bcd60e51b8152602060048201526012602482015271556e7265636f676e697a656420737461746560701b604482015290519081900360640190fd5b6000818060005411610cf7576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b60025b6000848152600560205260409020600d015460ff166003811115610d1a57fe5b149392505050565b60008060008060008060008060608a8060005411610d75576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b610d7d612910565b60008d81526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff90911690811115610e4757fe5b6003811115610e5257fe5b90525060408051600580825260c08201909252919250606091906020820160a0803683370190505090508160c0015181600081518110610e8e57fe5b602002602001018181525050610f41826101a0015183604001516028600360009054906101000a90046001600160a01b03166001600160a01b03166341fde16f8761012001516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f0857600080fd5b505afa158015610f1c573d6000803e3d6000fd5b505050506040513d6020811015610f3257600080fd5b505160c08701516101f46122fc565b8260e001510181600181518110610f5457fe5b60200260200101818152505081610100015181600281518110610f7357fe5b60200260200101818152505081610120015181600381518110610f9257fe5b60200260200101818152505081610140015181600481518110610fb157fe5b6020908102919091010152600080836101a001516003811115610fd057fe5b1415610fe957506c2bb0b4ba2830b93a34ba34b7b760991b5b6001836101a001516003811115610ffc57fe5b141561101d575074576169744d656d6f727950726f766556616c75657360581b5b6002836101a00151600381111561103057fe5b141561104e5750712334b734b9b432b221b630b4b6b2b92bb7b760711b5b6003836101a00151600381111561106157fe5b14156110825750742334b734b9b432b221b430b63632b733b2b92bb7b760591b5b82600001518360200151846060015185608001518660a0015187610160015188610180015187899c509c509c509c509c509c509c509c509c50505050509295985092959850929598565b60009081526001602052604090205460ff1690565b808060005411611126576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260409020600101546001600160a01b0316338114611190576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b600083815260056020908152604091829020600d810154600282015460035460099093015485516341fde16f60e01b81526004810191909152945161124c9560ff9093169491936028936001600160a01b03909116926341fde16f92602480840193829003018186803b15801561120657600080fd5b505afa15801561121a573d6000803e3d6000fd5b505050506040513d602081101561123057600080fd5b50516000888152600560205260409020600601546101f46122fc565b60008481526005602052604090206007015401421161129c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806129f0602e913960400191505060405180910390fd5b60016000848152600560205260409020600d015460ff1660038111156112be57fe5b146112fa5760405162461bcd60e51b81526004018080602001828103825260258152602001806129836025913960400191505060405180910390fd5b611303836126fa565b505050565b80806000541161134d576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260409020546001600160a01b03163381146113b4576040805162461bcd60e51b815260206004820152601860248201527721b0b73737ba1031329031b0b63632b210313c903ab9b2b960411b604482015290519081900360640190fd5b60016000848152600560205260409020600d015460ff1660038111156113d657fe5b146114125760405162461bcd60e51b81526004018080602001828103825260258152602001806129836025913960400191505060405180910390fd5b600083815260056020908152604091829020600801546004805484516343d4b78b60e01b8152918201839052935191936001600160a01b0316926343d4b78b92602480840193829003018186803b15801561146c57600080fd5b505afa158015611480573d6000803e3d6000fd5b505050506040513d602081101561149657600080fd5b50516114d35760405162461bcd60e51b8152600401808060200182810382526023815260200180612a506023913960400191505060405180910390fd5b600480546040805163f154f91d60e01b815292830184905251606092839283926001600160a01b039091169163f154f91d916024808301926000929190829003018186803b15801561152457600080fd5b505afa158015611538573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052606081101561156157600080fd5b810190808051604051939291908464010000000082111561158157600080fd5b90830190602082018581111561159657600080fd5b82518660208202830111640100000000821117156115b357600080fd5b82525081516020918201928201910280838360005b838110156115e05781810151838201526020016115c8565b505050509050016040526020018051604051939291908464010000000082111561160957600080fd5b90830190602082018581111561161e57600080fd5b825186602082028301116401000000008211171561163b57600080fd5b82525081516020918201928201910280838360005b83811015611668578181015183820152602001611650565b505050509050016040526020018051604051939291908464010000000082111561169157600080fd5b9083019060208201858111156116a657600080fd5b82518660208202830111640100000000821117156116c357600080fd5b82525081516020918201928201910280838360005b838110156116f05781810151838201526020016116d8565b50505050905001604052505050925092509250600080600560008a815260200190815260200160002060030160009054906101000a90046001600160a01b03166001600160a01b0316637718d4c88686866040518463ffffffff1660e01b815260040180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015611798578181015183820152602001611780565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156117d75781810151838201526020016117bf565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156118165781810151838201526020016117fe565b5050505090500196505050505050506040805180830381600087803b15801561183e57600080fd5b505af1158015611852573d6000803e3d6000fd5b505050506040513d604081101561186857600080fd5b5080516020909101516004805460408051631f6aea2b60e11b81529283018b9052519395509193506001600160a01b0390911691633ed5d4569160248082019260009290919082900301818387803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b50506004805460408051634b7a14dd60e11b81529283018b9052516001600160a01b0390911693506396f429ba92506024808301926020929190829003018186803b15801561192557600080fd5b505afa158015611939573d6000803e3d6000fd5b505050506040513d602081101561194f57600080fd5b505161198c5760405162461bcd60e51b81526004018080602001828103825260248152602001806129cc6024913960400191505060405180910390fd5b60ff821615801561199d5750845181145b8015611a2d5750600089815260056020908152604091829020600c0154600480548451630241916160e61b81529182018b9052935191936001600160a01b031692639064584092602480840193829003018186803b1580156119fe57600080fd5b505afa158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b505114155b15611a3b57611a3b896127c9565b611a44896126fa565b505050505050505050565b6000818060005411611a96576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6003610cfa565b808060005411611ae2576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6000828152600560205260408120600d015460ff166003811115611b0257fe5b14611b54576040805162461bcd60e51b815260206004820152601d60248201527f53746174652073686f756c642062652057616974506172746974696f6e000000604482015290519081900360640190fd5b6000828152600560209081526040918290206009015460035483516332a3a14f60e11b815260048101839052935191936001600160a01b0390911692636547429e92602480840193829003018186803b158015611bb057600080fd5b505afa158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b505115611bf057611bea836127c9565b50611cad565b6003546040805163d0a068cf60e01b81526004810184905290516001600160a01b039092169163d0a068cf91602480820192602092909190829003018186803b158015611c3c57600080fd5b505afa158015611c50573d6000803e3d6000fd5b505050506040513d6020811015611c6657600080fd5b505115611c7657611bea836126fa565b60405162461bcd60e51b8152600401808060200182810382526032815260200180612a1e6032913960400191505060405180910390fd5b5050565b6060808080600080878152600560205260409020600d015460ff166003811115611cd757fe5b1415611d815760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060035484519293506001600160a01b031691849150600090611d3757fe5b6001600160a01b03909216602092830291909101820152600087815260059091526040812060090154825190918391611d6c57fe5b60209081029190910101529092509050611e55565b60016000878152600560205260409020600d015460ff166003811115611da357fe5b1415611e385760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060045484519293506001600160a01b031691849150600090611e0357fe5b6001600160a01b03909216602092830291909101820152600087815260059091526040812060080154825190918391611d6c57fe5b505060408051600080825260208201908152818301909252925090505b9250929050565b808060005411611ea1576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b60008281526002602052604081208054600101905582906000848152600560205260409020600d015460ff166003811115611ed857fe5b14611f2a576040805162461bcd60e51b815260206004820152601d60248201527f53746174652073686f756c642062652057616974506172746974696f6e000000604482015290519081900360640190fd5b600354600084815260056020908152604091829020600901548251631d9f2d7760e01b8152600481019190915291516001600160a01b0390931692631d9f2d77926024808201939291829003018186803b158015611f8757600080fd5b505afa158015611f9b573d6000803e3d6000fd5b505050506040513d6020811015611fb157600080fd5b5051612004576040805162461bcd60e51b815260206004820152601a60248201527f446976657267656e63652073686f756c6420626520666f756e64000000000000604482015290519081900360640190fd5b600083815260056020908152604080832060090154600354825163326ff2f560e01b81526004810183905292519194936001600160a01b039091169263326ff2f59260248083019392829003018186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d602081101561208b57600080fd5b5051600086815260056020908152604091829020600a0183905560035482516360696f8160e01b8152600481018790526024810185905292519394506001600160a01b0316926360696f81926044808201939291829003018186803b1580156120f357600080fd5b505afa158015612107573d6000803e3d6000fd5b505050506040513d602081101561211d57600080fd5b5051600086815260056020908152604091829020600b019290925560035481516360696f8160e01b81526004810186905260018501602482015291516001600160a01b03909116926360696f819260448082019391829003018186803b15801561218657600080fd5b505afa15801561219a573d6000803e3d6000fd5b505050506040513d60208110156121b057600080fd5b50516000868152600560209081526040808320600c810194909455600480548554600b909601548351631140bc8f60e31b815230938101939093526001600160a01b039687166024840152604483015291519490911693638a05e47893606480840194938390030190829087803b15801561222a57600080fd5b505af115801561223e573d6000803e3d6000fd5b505050506040513d602081101561225457600080fd5b50516000868152600560209081526040808320600881018590556009810193909355426007840155600d909201805460ff1916600117905581518881529081019290925280517fe6772c68f52fac01f8694176345ad126ec91d30c32f27a57e8d20c076c2b063d9281900390910190a15050505050565b60006101005b82156122e75760019290921c91600019016122d1565b60028160ff03816122f457fe5b049392505050565b60008087600381111561230b57fe5b14156123ac5760035460408051631b8798d560e11b8152600481018990526024810188905260448101879052606481018690526084810185905290516001600160a01b039092169163370f31aa9160a480820192602092909190829003018186803b15801561237957600080fd5b505afa15801561238d573d6000803e3d6000fd5b505050506040513d60208110156123a357600080fd5b5051905061243f565b60018760038111156123ba57fe5b14156124115760048054604080516384dfd44d60e01b815292830189905260248301889052516001600160a01b03909116916384dfd44d916044808301926020929190829003018186803b15801561237957600080fd5b600287600381111561241f57fe5b14806124365750600387600381111561243457fe5b145b15610c6e575060005b9695505050505050565b6000612453612910565b60008581526005602081815260409283902083516101c08101855281546001600160a01b03908116825260018301548116938201939093526002820154948101949094526003808201549092166060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c820154610180840152600d8201546101a084019160ff9091169081111561251d57fe5b600381111561252857fe5b9052509050600080868152600560205260409020600d015460ff16600381111561254e57fe5b14156125e15760e081015160035461012083015160408051630853f80360e31b81526004810192909252516001600160a01b039092169163429fc01891602480820192602092909190829003018186803b1580156125ab57600080fd5b505afa1580156125bf573d6000803e3d6000fd5b505050506040513d60208110156125d557600080fd5b50510391506105e89050565b60016000868152600560205260409020600d015460ff16600381111561260357fe5b141561269d57600480546101008301516040805163db1de41960e01b8152938401919091526024830187905260448301869052516001600160a01b039091169163db1de419916064808301926020929190829003018186803b15801561266857600080fd5b505afa15801561267c573d6000803e3d6000fd5b505050506040513d602081101561269257600080fd5b505191506105e89050565b60026000868152600560205260409020600d015460ff1660038111156126bf57fe5b14806126ea575060036000868152600560205260409020600d015460ff1660038111156126e857fe5b145b15610c6e57506000949350505050565b80806000541161273f576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6127488261283a565b6000828152600560205260409020600d0180546002919060ff19166001835b021790555060008281526005602052604090819020600d015490517f2b38fc22e74e632df708aa11ee5b00b21845d40c64ccf39fafc8ef018b82b9b19160ff1690808260038111156127b557fe5b815260200191505060405180910390a15050565b80806000541161280e576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b6128178261283a565b6000828152600560205260409020600d0180546003919060ff1916600183612767565b80806000541161287f576040805162461bcd60e51b81526020600482015260166024820152600080516020612a73833981519152604482015290519081900360640190fd5b600082815260056020818152604080842080546001600160a01b031990811682556001808301805483169055600280840188905560038401805490931690925560048301879055948201869055600682018690556007820186905560088201869055600a8201869055600b8201869055600c909101859055928252808420805460ff19169055919052812055611cad565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018290526101808101829052906101a08201529056fe53746174652073686f756c6420626520576169744d656d6f727950726f766556616c75657346696e616c2074696d65206d7573742062652067726561746572207468616e207a65726f5374617465206f66204d4d2073686f756c642062652046696e69736865645265706c61794475726174696f6e206f6620576169744d656d6f727950726f766556616c756573206d757374206265206f7665724661696c20746f2057696e4279506172746974696f6e54696d656f757420696e2063757272656e7420636f6e646974696f6e5374617465206f66204d4d2073686f756c642062652057616974696e675265706c6179496e646578206e6f7420696e7374616e74696174656400000000000000000000a2646970667358221220b0472aeb6d1fafba8da23af46b1f47be1f9e1e463238728f2f918c3ee872304964736f6c63430007040033",
  "linkReferences": {},
  "deployedLinkReferences": {},
  "devdoc": {
    "kind": "dev",
    "methods": {
      "getMaxInstanceDuration(uint256,uint256,uint256,uint256,uint256)": {
        "params": {
          "_maxCycle": "is the maximum amount of steps a machine can perform"
        }
      },
      "instantiate(address,address,uint256,address,bytes32,bytes32,uint256)": {
        "params": {
          "_challenger": "address of the challenger.",
          "_claimer": "address of the claimer.",
          "_claimerFinalHash": "final hash claimed by claimer",
          "_finalTime": "max cycle of the machine for that computation",
          "_initialHash": "hash in which both claimer and challenger agree on",
          "_machineAddress": "address of the machine that will run the instruction",
          "_roundDuration": "duration of the round (security param)"
        },
        "returns": {
          "_0": "VG index."
        }
      }
    },
    "version": 1
  },
  "evm": {
    "bytecode": {
      "generatedSources": [],
      "linkReferences": {},
      "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x2B46 CODESIZE SUB DUP1 PUSH2 0x2B46 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP4 SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2AC8 DUP1 PUSH2 0x7E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x120 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6CC9F17E GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xB6B5C319 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xB6B5C319 EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0xBFA69ED8 EQ PUSH2 0x3FB JUMPI DUP1 PUSH4 0xC526656C EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0xCD3784E7 EQ PUSH2 0x4DD JUMPI DUP1 PUSH4 0xDAAADF4E EQ PUSH2 0x4FA JUMPI PUSH2 0x120 JUMP JUMPDEST DUP1 PUSH4 0x6CC9F17E EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0x73DF1612 EQ PUSH2 0x2B2 JUMPI DUP1 PUSH4 0x82AFD23B EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0xA2DC7973 EQ PUSH2 0x3A2 JUMPI DUP1 PUSH4 0xA703DF28 EQ PUSH2 0x3C1 JUMPI PUSH2 0x120 JUMP JUMPDEST DUP1 PUSH4 0x26987B60 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x26987B60 EQ PUSH2 0x201 JUMPI DUP1 PUSH4 0x370F31AA EQ PUSH2 0x209 JUMPI DUP1 PUSH4 0x3D46B819 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x429FC018 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0x5748C130 EQ PUSH2 0x278 JUMPI PUSH2 0x120 JUMP JUMPDEST DUP1 PUSH3 0x446386 EQ PUSH2 0x125 JUMPI DUP1 PUSH4 0x1FF62AB EQ PUSH2 0x154 JUMPI DUP1 PUSH4 0xC91927B EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0x20B73870 EQ PUSH2 0x1B1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x517 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x180 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5A4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x5EF JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x64C JUMP JUMPDEST PUSH2 0x142 PUSH2 0x8E8 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x8EE JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x922 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x9CC JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x180 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xCB0 JUMP JUMPDEST PUSH2 0x2DE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD22 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x369 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x351 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x180 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x10CC JUMP JUMPDEST PUSH2 0x3BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x10E1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1308 JUMP JUMPDEST PUSH2 0x180 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1A4F JUMP JUMPDEST PUSH2 0x3BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1A9D JUMP JUMPDEST PUSH2 0x444 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x42E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1CB1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x488 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x470 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4C7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4AF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1E5C JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x510 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x22CB JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD SLOAD DUP2 MLOAD PUSH3 0x2231C3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH3 0x446386 SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x572 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x586 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x59C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ DUP1 PUSH2 0x5E8 JUMPI POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD SLOAD DUP2 MLOAD PUSH4 0x41FDE16F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0x41FDE16F SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x572 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x68C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x29A8 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP14 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE DUP4 SLOAD DUP5 MSTORE SWAP2 SWAP1 SWAP3 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD SWAP3 DUP11 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x6DC DUP3 PUSH2 0x22CB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x4 SWAP6 DUP13 MUL DUP7 ADD PUSH1 0x2 SWAP1 SWAP2 ADD SSTORE DUP4 SLOAD DUP5 MSTORE DUP1 DUP5 KECCAK256 PUSH1 0x3 SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP15 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP6 SLOAD DUP7 MSTORE DUP3 DUP7 KECCAK256 DUP8 ADD DUP12 SWAP1 SSTORE DUP6 SLOAD DUP7 MSTORE DUP3 DUP7 KECCAK256 SWAP1 SWAP5 ADD DUP10 SWAP1 SSTORE DUP5 SLOAD DUP6 MSTORE DUP2 DUP6 KECCAK256 PUSH1 0x6 ADD DUP9 SWAP1 SSTORE DUP5 SLOAD DUP6 MSTORE DUP2 DUP6 KECCAK256 TIMESTAMP PUSH1 0x7 SWAP1 SWAP2 ADD SSTORE SLOAD DUP2 MLOAD PUSH4 0x3562820D PUSH1 0xE0 SHL DUP2 MSTORE DUP15 DUP6 AND SWAP7 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP13 DUP5 AND PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x44 DUP7 ADD DUP11 SWAP1 MSTORE PUSH1 0x64 DUP7 ADD DUP10 SWAP1 MSTORE PUSH1 0x84 DUP7 ADD DUP9 SWAP1 MSTORE PUSH1 0xA PUSH1 0xA4 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD SWAP3 AND SWAP4 PUSH4 0x3562820D SWAP4 PUSH1 0xE4 DUP1 DUP4 ADD SWAP5 SWAP3 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x9 ADD SWAP3 SWAP1 SWAP3 SSTORE DUP1 SLOAD DUP2 MSTORE SWAP1 DUP2 KECCAK256 PUSH1 0xD ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SLOAD PUSH32 0xD4AD9A0F11913813F7818801AD85D597C0DFD1D2C01BCB1A02F29C6D6544FDD5 SWAP1 DUP10 DUP10 PUSH2 0x848 DUP7 PUSH2 0x22CB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD DUP3 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND SWAP2 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP5 AND DUP6 DUP3 ADD MSTORE PUSH1 0x4 SWAP2 DUP13 MUL SWAP2 SWAP1 SWAP2 ADD PUSH1 0x60 DUP6 ADD MSTORE SWAP2 DUP10 AND PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD DUP7 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x120 ADD SWAP1 LOG1 POP PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP3 OR SWAP1 SSTORE DUP2 SLOAD SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x900 PUSH1 0x0 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x22FC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x913 PUSH1 0x1 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x22FC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x969 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x972 DUP2 PUSH2 0x10CC JUMP JUMPDEST PUSH2 0x9B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x496E64657820696E616374697665 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xA13 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xA1B PUSH2 0x2910 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x1C0 DUP2 ADD DUP6 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP1 DUP3 ADD SLOAD SWAP1 SWAP3 AND PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP6 ADD MSTORE SWAP2 DUP3 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x8 DUP3 ADD SLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH1 0x9 DUP3 ADD SLOAD PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0xA DUP3 ADD SLOAD PUSH2 0x140 DUP5 ADD MSTORE PUSH1 0xB DUP3 ADD SLOAD PUSH2 0x160 DUP5 ADD MSTORE PUSH1 0xC DUP3 ADD SLOAD PUSH2 0x180 DUP5 ADD MSTORE PUSH1 0xD DUP3 ADD SLOAD PUSH2 0x1A0 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xAE5 JUMPI INVALID JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xAF0 JUMPI INVALID JUMPDEST DUP2 MSTORE POP POP SWAP1 POP PUSH2 0xB06 DUP5 DUP3 PUSH1 0x40 ADD MLOAD PUSH1 0x28 PUSH2 0x2449 JUMP JUMPDEST PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xB5B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xB7B JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB99 JUMPI PUSH13 0x2BB0B4BA2830B93A34BA34B7B7 PUSH1 0x99 SHL SWAP2 POP PUSH2 0x9C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xBBB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xBE1 JUMPI PUSH21 0x576169744D656D6F727950726F766556616C756573 PUSH1 0x58 SHL SWAP2 POP PUSH2 0x9C6 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xC03 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC26 JUMPI PUSH18 0x2334B734B9B432B221B630B4B6B2B92BB7B7 PUSH1 0x71 SHL SWAP2 POP PUSH2 0x9C6 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xC48 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC6E JUMPI PUSH21 0x2334B734B9B432B221B430B63632B733B2B92BB7B7 PUSH1 0x59 SHL SWAP2 POP PUSH2 0x9C6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x556E7265636F676E697A6564207374617465 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xCF7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xD1A JUMPI INVALID JUMPDEST EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP11 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xD75 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD7D PUSH2 0x2910 JUMP JUMPDEST PUSH1 0x0 DUP14 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x1C0 DUP2 ADD DUP6 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP1 DUP3 ADD SLOAD SWAP1 SWAP3 AND PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP6 ADD MSTORE SWAP2 DUP3 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x8 DUP3 ADD SLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH1 0x9 DUP3 ADD SLOAD PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0xA DUP3 ADD SLOAD PUSH2 0x140 DUP5 ADD MSTORE PUSH1 0xB DUP3 ADD SLOAD PUSH2 0x160 DUP5 ADD MSTORE PUSH1 0xC DUP3 ADD SLOAD PUSH2 0x180 DUP5 ADD MSTORE PUSH1 0xD DUP3 ADD SLOAD PUSH2 0x1A0 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xE47 JUMPI INVALID JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xE52 JUMPI INVALID JUMPDEST SWAP1 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x5 DUP1 DUP3 MSTORE PUSH1 0xC0 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0xA0 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP2 PUSH1 0xC0 ADD MLOAD DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE8E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0xF41 DUP3 PUSH2 0x1A0 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x28 PUSH1 0x3 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x41FDE16F DUP8 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF1C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xC0 DUP8 ADD MLOAD PUSH2 0x1F4 PUSH2 0x22FC JUMP JUMPDEST DUP3 PUSH1 0xE0 ADD MLOAD ADD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xF54 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH2 0x100 ADD MLOAD DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0xF73 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH2 0x120 ADD MLOAD DUP2 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0xF92 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH2 0xFB1 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 DUP1 DUP4 PUSH2 0x1A0 ADD MLOAD PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xFD0 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xFE9 JUMPI POP PUSH13 0x2BB0B4BA2830B93A34BA34B7B7 PUSH1 0x99 SHL JUMPDEST PUSH1 0x1 DUP4 PUSH2 0x1A0 ADD MLOAD PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xFFC JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x101D JUMPI POP PUSH21 0x576169744D656D6F727950726F766556616C756573 PUSH1 0x58 SHL JUMPDEST PUSH1 0x2 DUP4 PUSH2 0x1A0 ADD MLOAD PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1030 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x104E JUMPI POP PUSH18 0x2334B734B9B432B221B630B4B6B2B92BB7B7 PUSH1 0x71 SHL JUMPDEST PUSH1 0x3 DUP4 PUSH2 0x1A0 ADD MLOAD PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1061 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1082 JUMPI POP PUSH21 0x2334B734B9B432B221B430B63632B733B2B92BB7B7 PUSH1 0x59 SHL JUMPDEST DUP3 PUSH1 0x0 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH2 0x160 ADD MLOAD DUP9 PUSH2 0x180 ADD MLOAD DUP8 DUP10 SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP POP POP POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1126 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x1190 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0xD DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x3 SLOAD PUSH1 0x9 SWAP1 SWAP4 ADD SLOAD DUP6 MLOAD PUSH4 0x41FDE16F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 MLOAD PUSH2 0x124C SWAP6 PUSH1 0xFF SWAP1 SWAP4 AND SWAP5 SWAP2 SWAP4 PUSH1 0x28 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 PUSH4 0x41FDE16F SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x121A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x6 ADD SLOAD PUSH2 0x1F4 PUSH2 0x22FC JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD SLOAD ADD TIMESTAMP GT PUSH2 0x129C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x29F0 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x12BE JUMPI INVALID JUMPDEST EQ PUSH2 0x12FA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2983 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1303 DUP4 PUSH2 0x26FA JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x134D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x13B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x13D6 JUMPI INVALID JUMPDEST EQ PUSH2 0x1412 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2983 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x8 ADD SLOAD PUSH1 0x4 DUP1 SLOAD DUP5 MLOAD PUSH4 0x43D4B78B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP3 ADD DUP4 SWAP1 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0x43D4B78B SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x146C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1480 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x14D3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2A50 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF154F91D PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP4 ADD DUP5 SWAP1 MSTORE MLOAD PUSH1 0x60 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xF154F91D SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1524 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1538 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1561 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x1581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x1596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x15B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15E0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x15C8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x1609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x161E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x163B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1668 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1650 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x1691 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x16A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x16C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x16F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x16D8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 DUP11 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7718D4C8 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 SUB DUP5 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1798 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1780 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP5 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x17D7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x17BF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP5 DUP2 SUB DUP3 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1816 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x17FE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x183E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1852 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1868 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1F6AEA2B PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 DUP4 ADD DUP12 SWAP1 MSTORE MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x3ED5D456 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x18D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4B7A14DD PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 DUP4 ADD DUP12 SWAP1 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP4 POP PUSH4 0x96F429BA SWAP3 POP PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1925 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1939 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x194F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x198C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x29CC PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xFF DUP3 AND ISZERO DUP1 ISZERO PUSH2 0x199D JUMPI POP DUP5 MLOAD DUP2 EQ JUMPDEST DUP1 ISZERO PUSH2 0x1A2D JUMPI POP PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0xC ADD SLOAD PUSH1 0x4 DUP1 SLOAD DUP5 MLOAD PUSH4 0x2419161 PUSH1 0xE6 SHL DUP2 MSTORE SWAP2 DUP3 ADD DUP12 SWAP1 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0x90645840 SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A12 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD EQ ISZERO JUMPDEST ISZERO PUSH2 0x1A3B JUMPI PUSH2 0x1A3B DUP10 PUSH2 0x27C9 JUMP JUMPDEST PUSH2 0x1A44 DUP10 PUSH2 0x26FA JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1A96 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 PUSH2 0xCFA JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1AE2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1B02 JUMPI INVALID JUMPDEST EQ PUSH2 0x1B54 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53746174652073686F756C642062652057616974506172746974696F6E000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0x3 SLOAD DUP4 MLOAD PUSH4 0x32A3A14F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 PUSH4 0x6547429E SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BC4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1BF0 JUMPI PUSH2 0x1BEA DUP4 PUSH2 0x27C9 JUMP JUMPDEST POP PUSH2 0x1CAD JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xD0A068CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xD0A068CF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1C76 JUMPI PUSH2 0x1BEA DUP4 PUSH2 0x26FA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x32 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2A1E PUSH1 0x32 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP1 DUP1 PUSH1 0x0 DUP1 DUP8 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1CD7 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1D81 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP5 POP SWAP1 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x3 SLOAD DUP5 MLOAD SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP5 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1D37 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD DUP3 MLOAD SWAP1 SWAP2 DUP4 SWAP2 PUSH2 0x1D6C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1E55 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1DA3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1E38 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP5 POP SWAP1 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x4 SLOAD DUP5 MLOAD SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP5 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1E03 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD SLOAD DUP3 MLOAD SWAP1 SWAP2 DUP4 SWAP2 PUSH2 0x1D6C JUMPI INVALID JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP3 POP SWAP1 POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1EA1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP3 SWAP1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1ED8 JUMPI INVALID JUMPDEST EQ PUSH2 0x1F2A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53746174652073686F756C642062652057616974506172746974696F6E000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD DUP3 MLOAD PUSH4 0x1D9F2D77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND SWAP3 PUSH4 0x1D9F2D77 SWAP3 PUSH1 0x24 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F9B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2004 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446976657267656E63652073686F756C6420626520666F756E64000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0x3 SLOAD DUP3 MLOAD PUSH4 0x326FF2F5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP3 MLOAD SWAP2 SWAP5 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 PUSH4 0x326FF2F5 SWAP3 PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2061 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2075 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x208B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0xA ADD DUP4 SWAP1 SSTORE PUSH1 0x3 SLOAD DUP3 MLOAD PUSH4 0x60696F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE SWAP3 MLOAD SWAP4 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0x60696F81 SWAP3 PUSH1 0x44 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2107 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x211D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0xB ADD SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0x3 SLOAD DUP2 MLOAD PUSH4 0x60696F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 DUP6 ADD PUSH1 0x24 DUP3 ADD MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 PUSH4 0x60696F81 SWAP3 PUSH1 0x44 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x219A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0xC DUP2 ADD SWAP5 SWAP1 SWAP5 SSTORE PUSH1 0x4 DUP1 SLOAD DUP6 SLOAD PUSH1 0xB SWAP1 SWAP7 ADD SLOAD DUP4 MLOAD PUSH4 0x1140BC8F PUSH1 0xE3 SHL DUP2 MSTORE ADDRESS SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE SWAP2 MLOAD SWAP5 SWAP1 SWAP2 AND SWAP4 PUSH4 0x8A05E478 SWAP4 PUSH1 0x64 DUP1 DUP5 ADD SWAP5 SWAP4 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x222A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x223E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x9 DUP2 ADD SWAP4 SWAP1 SWAP4 SSTORE TIMESTAMP PUSH1 0x7 DUP5 ADD SSTORE PUSH1 0xD SWAP1 SWAP3 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP2 MLOAD DUP9 DUP2 MSTORE SWAP1 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP1 MLOAD PUSH32 0xE6772C68F52FAC01F8694176345AD126EC91D30C32F27A57E8D20C076C2B063D SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 JUMPDEST DUP3 ISZERO PUSH2 0x22E7 JUMPI PUSH1 0x1 SWAP3 SWAP1 SWAP3 SHR SWAP2 PUSH1 0x0 NOT ADD PUSH2 0x22D1 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0xFF SUB DUP2 PUSH2 0x22F4 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x230B JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x23AC JUMPI PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B8798D5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x370F31AA SWAP2 PUSH1 0xA4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x238D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x23A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x243F JUMP JUMPDEST PUSH1 0x1 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x23BA JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x2411 JUMPI PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x84DFD44D PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x24 DUP4 ADD DUP9 SWAP1 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x84DFD44D SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x241F JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x2436 JUMPI POP PUSH1 0x3 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2434 JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0xC6E JUMPI POP PUSH1 0x0 JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2453 PUSH2 0x2910 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x1C0 DUP2 ADD DUP6 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP1 DUP3 ADD SLOAD SWAP1 SWAP3 AND PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP6 ADD MSTORE SWAP2 DUP3 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x8 DUP3 ADD SLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH1 0x9 DUP3 ADD SLOAD PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0xA DUP3 ADD SLOAD PUSH2 0x140 DUP5 ADD MSTORE PUSH1 0xB DUP3 ADD SLOAD PUSH2 0x160 DUP5 ADD MSTORE PUSH1 0xC DUP3 ADD SLOAD PUSH2 0x180 DUP5 ADD MSTORE PUSH1 0xD DUP3 ADD SLOAD PUSH2 0x1A0 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x251D JUMPI INVALID JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2528 JUMPI INVALID JUMPDEST SWAP1 MSTORE POP SWAP1 POP PUSH1 0x0 DUP1 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x254E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x25E1 JUMPI PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0x3 SLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x853F803 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x429FC018 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SUB SWAP2 POP PUSH2 0x5E8 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2603 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x269D JUMPI PUSH1 0x4 DUP1 SLOAD PUSH2 0x100 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xDB1DE419 PUSH1 0xE0 SHL DUP2 MSTORE SWAP4 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP4 ADD DUP7 SWAP1 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xDB1DE419 SWAP2 PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2668 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x267C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 POP PUSH2 0x5E8 SWAP1 POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x26BF JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x26EA JUMPI POP PUSH1 0x3 PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x26E8 JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0xC6E JUMPI POP PUSH1 0x0 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x273F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2748 DUP3 PUSH2 0x283A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD DUP1 SLOAD PUSH1 0x2 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD SWAP1 MLOAD PUSH32 0x2B38FC22E74E632DF708AA11EE5B00B21845D40C64CCF39FAFC8EF018B82B9B1 SWAP2 PUSH1 0xFF AND SWAP1 DUP1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x27B5 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x280E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2817 DUP3 PUSH2 0x283A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD DUP1 SLOAD PUSH1 0x3 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH2 0x2767 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x287F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP1 DUP4 ADD DUP1 SLOAD DUP4 AND SWAP1 SSTORE PUSH1 0x2 DUP1 DUP5 ADD DUP9 SWAP1 SSTORE PUSH1 0x3 DUP5 ADD DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP3 SSTORE PUSH1 0x4 DUP4 ADD DUP8 SWAP1 SSTORE SWAP5 DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0x6 DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0x7 DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0x8 DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0xA DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0xB DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0xC SWAP1 SWAP2 ADD DUP6 SWAP1 SSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x1CAD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x1C0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x1A0 DUP3 ADD MSTORE SWAP1 JUMP INVALID MSTORE8 PUSH21 0x6174652073686F756C6420626520576169744D656D PUSH16 0x727950726F766556616C75657346696E PUSH2 0x6C20 PUSH21 0x696D65206D75737420626520677265617465722074 PUSH9 0x616E207A65726F5374 PUSH2 0x7465 KECCAK256 PUSH16 0x66204D4D2073686F756C642062652046 PUSH10 0x6E69736865645265706C PUSH2 0x7944 PUSH22 0x726174696F6E206F6620576169744D656D6F72795072 PUSH16 0x766556616C756573206D757374206265 KECCAK256 PUSH16 0x7665724661696C20746F2057696E4279 POP PUSH2 0x7274 PUSH10 0x74696F6E54696D656F75 PUSH21 0x20696E2063757272656E7420636F6E646974696F6E MSTORE8 PUSH21 0x617465206F66204D4D2073686F756C642062652057 PUSH2 0x6974 PUSH10 0x6E675265706C6179496E PUSH5 0x6578206E6F PUSH21 0x20696E7374616E7469617465640000000000000000 STOP STOP LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 SELFBALANCE 0x2A 0xEB PUSH14 0x1FAFBA8DA23AF46B1F47BE1F9E1E CHAINID ORIGIN CODESIZE PUSH19 0x8F2F918C3EE872304964736F6C634300070400 CALLER ",
      "sourceMap": "1510:21106:11:-:0;;;759:1:2;729:31;;4440:227:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4440:227:11;;;;;;;4549:9;:61;;-1:-1:-1;;;;;4549:61:11;;;-1:-1:-1;;;;;;4549:61:11;;;;;;;4620:2;:40;;;;;;;;;;;;;;1510:21106;;;;;;"
    },
    "deployedBytecode": {
      "generatedSources": [],
      "immutableReferences": {},
      "linkReferences": {},
      "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x120 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6CC9F17E GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xB6B5C319 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xB6B5C319 EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0xBFA69ED8 EQ PUSH2 0x3FB JUMPI DUP1 PUSH4 0xC526656C EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0xCD3784E7 EQ PUSH2 0x4DD JUMPI DUP1 PUSH4 0xDAAADF4E EQ PUSH2 0x4FA JUMPI PUSH2 0x120 JUMP JUMPDEST DUP1 PUSH4 0x6CC9F17E EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0x73DF1612 EQ PUSH2 0x2B2 JUMPI DUP1 PUSH4 0x82AFD23B EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0xA2DC7973 EQ PUSH2 0x3A2 JUMPI DUP1 PUSH4 0xA703DF28 EQ PUSH2 0x3C1 JUMPI PUSH2 0x120 JUMP JUMPDEST DUP1 PUSH4 0x26987B60 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x26987B60 EQ PUSH2 0x201 JUMPI DUP1 PUSH4 0x370F31AA EQ PUSH2 0x209 JUMPI DUP1 PUSH4 0x3D46B819 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x429FC018 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0x5748C130 EQ PUSH2 0x278 JUMPI PUSH2 0x120 JUMP JUMPDEST DUP1 PUSH3 0x446386 EQ PUSH2 0x125 JUMPI DUP1 PUSH4 0x1FF62AB EQ PUSH2 0x154 JUMPI DUP1 PUSH4 0xC91927B EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0x20B73870 EQ PUSH2 0x1B1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x517 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x180 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5A4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x5EF JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x64C JUMP JUMPDEST PUSH2 0x142 PUSH2 0x8E8 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x8EE JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x922 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x9CC JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x180 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xCB0 JUMP JUMPDEST PUSH2 0x2DE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD22 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x369 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x351 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x180 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x10CC JUMP JUMPDEST PUSH2 0x3BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x10E1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1308 JUMP JUMPDEST PUSH2 0x180 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1A4F JUMP JUMPDEST PUSH2 0x3BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1A9D JUMP JUMPDEST PUSH2 0x444 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x42E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1CB1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x488 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x470 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4C7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4AF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3BF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1E5C JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x510 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x22CB JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD SLOAD DUP2 MLOAD PUSH3 0x2231C3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH3 0x446386 SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x572 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x586 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x59C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ DUP1 PUSH2 0x5E8 JUMPI POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD SLOAD DUP2 MLOAD PUSH4 0x41FDE16F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0x41FDE16F SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x572 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x68C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x29A8 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP14 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE DUP4 SLOAD DUP5 MSTORE SWAP2 SWAP1 SWAP3 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD SWAP3 DUP11 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x6DC DUP3 PUSH2 0x22CB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x4 SWAP6 DUP13 MUL DUP7 ADD PUSH1 0x2 SWAP1 SWAP2 ADD SSTORE DUP4 SLOAD DUP5 MSTORE DUP1 DUP5 KECCAK256 PUSH1 0x3 SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP15 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP6 SLOAD DUP7 MSTORE DUP3 DUP7 KECCAK256 DUP8 ADD DUP12 SWAP1 SSTORE DUP6 SLOAD DUP7 MSTORE DUP3 DUP7 KECCAK256 SWAP1 SWAP5 ADD DUP10 SWAP1 SSTORE DUP5 SLOAD DUP6 MSTORE DUP2 DUP6 KECCAK256 PUSH1 0x6 ADD DUP9 SWAP1 SSTORE DUP5 SLOAD DUP6 MSTORE DUP2 DUP6 KECCAK256 TIMESTAMP PUSH1 0x7 SWAP1 SWAP2 ADD SSTORE SLOAD DUP2 MLOAD PUSH4 0x3562820D PUSH1 0xE0 SHL DUP2 MSTORE DUP15 DUP6 AND SWAP7 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE DUP13 DUP5 AND PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x44 DUP7 ADD DUP11 SWAP1 MSTORE PUSH1 0x64 DUP7 ADD DUP10 SWAP1 MSTORE PUSH1 0x84 DUP7 ADD DUP9 SWAP1 MSTORE PUSH1 0xA PUSH1 0xA4 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD DUP13 SWAP1 MSTORE SWAP1 MLOAD SWAP3 AND SWAP4 PUSH4 0x3562820D SWAP4 PUSH1 0xE4 DUP1 DUP4 ADD SWAP5 SWAP3 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x9 ADD SWAP3 SWAP1 SWAP3 SSTORE DUP1 SLOAD DUP2 MSTORE SWAP1 DUP2 KECCAK256 PUSH1 0xD ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SLOAD PUSH32 0xD4AD9A0F11913813F7818801AD85D597C0DFD1D2C01BCB1A02F29C6D6544FDD5 SWAP1 DUP10 DUP10 PUSH2 0x848 DUP7 PUSH2 0x22CB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD DUP3 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND SWAP2 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP5 AND DUP6 DUP3 ADD MSTORE PUSH1 0x4 SWAP2 DUP13 MUL SWAP2 SWAP1 SWAP2 ADD PUSH1 0x60 DUP6 ADD MSTORE SWAP2 DUP10 AND PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD DUP7 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x120 ADD SWAP1 LOG1 POP PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP3 OR SWAP1 SSTORE DUP2 SLOAD SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x900 PUSH1 0x0 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x22FC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x913 PUSH1 0x1 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x22FC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x969 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x972 DUP2 PUSH2 0x10CC JUMP JUMPDEST PUSH2 0x9B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x496E64657820696E616374697665 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xA13 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xA1B PUSH2 0x2910 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x1C0 DUP2 ADD DUP6 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP1 DUP3 ADD SLOAD SWAP1 SWAP3 AND PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP6 ADD MSTORE SWAP2 DUP3 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x8 DUP3 ADD SLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH1 0x9 DUP3 ADD SLOAD PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0xA DUP3 ADD SLOAD PUSH2 0x140 DUP5 ADD MSTORE PUSH1 0xB DUP3 ADD SLOAD PUSH2 0x160 DUP5 ADD MSTORE PUSH1 0xC DUP3 ADD SLOAD PUSH2 0x180 DUP5 ADD MSTORE PUSH1 0xD DUP3 ADD SLOAD PUSH2 0x1A0 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xAE5 JUMPI INVALID JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xAF0 JUMPI INVALID JUMPDEST DUP2 MSTORE POP POP SWAP1 POP PUSH2 0xB06 DUP5 DUP3 PUSH1 0x40 ADD MLOAD PUSH1 0x28 PUSH2 0x2449 JUMP JUMPDEST PUSH1 0xE0 SWAP1 SWAP2 ADD MLOAD ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xB5B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xB7B JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB99 JUMPI PUSH13 0x2BB0B4BA2830B93A34BA34B7B7 PUSH1 0x99 SHL SWAP2 POP PUSH2 0x9C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xBBB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xBE1 JUMPI PUSH21 0x576169744D656D6F727950726F766556616C756573 PUSH1 0x58 SHL SWAP2 POP PUSH2 0x9C6 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xC03 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC26 JUMPI PUSH18 0x2334B734B9B432B221B630B4B6B2B92BB7B7 PUSH1 0x71 SHL SWAP2 POP PUSH2 0x9C6 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xC48 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xC6E JUMPI PUSH21 0x2334B734B9B432B221B430B63632B733B2B92BB7B7 PUSH1 0x59 SHL SWAP2 POP PUSH2 0x9C6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x556E7265636F676E697A6564207374617465 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xCF7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xD1A JUMPI INVALID JUMPDEST EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP11 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0xD75 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD7D PUSH2 0x2910 JUMP JUMPDEST PUSH1 0x0 DUP14 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x1C0 DUP2 ADD DUP6 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP1 DUP3 ADD SLOAD SWAP1 SWAP3 AND PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP6 ADD MSTORE SWAP2 DUP3 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x8 DUP3 ADD SLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH1 0x9 DUP3 ADD SLOAD PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0xA DUP3 ADD SLOAD PUSH2 0x140 DUP5 ADD MSTORE PUSH1 0xB DUP3 ADD SLOAD PUSH2 0x160 DUP5 ADD MSTORE PUSH1 0xC DUP3 ADD SLOAD PUSH2 0x180 DUP5 ADD MSTORE PUSH1 0xD DUP3 ADD SLOAD PUSH2 0x1A0 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0xE47 JUMPI INVALID JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xE52 JUMPI INVALID JUMPDEST SWAP1 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x5 DUP1 DUP3 MSTORE PUSH1 0xC0 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x60 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0xA0 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP2 PUSH1 0xC0 ADD MLOAD DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE8E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0xF41 DUP3 PUSH2 0x1A0 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x28 PUSH1 0x3 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x41FDE16F DUP8 PUSH2 0x120 ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF1C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xC0 DUP8 ADD MLOAD PUSH2 0x1F4 PUSH2 0x22FC JUMP JUMPDEST DUP3 PUSH1 0xE0 ADD MLOAD ADD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xF54 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH2 0x100 ADD MLOAD DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0xF73 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH2 0x120 ADD MLOAD DUP2 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0xF92 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH2 0xFB1 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 DUP1 DUP4 PUSH2 0x1A0 ADD MLOAD PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xFD0 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xFE9 JUMPI POP PUSH13 0x2BB0B4BA2830B93A34BA34B7B7 PUSH1 0x99 SHL JUMPDEST PUSH1 0x1 DUP4 PUSH2 0x1A0 ADD MLOAD PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xFFC JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x101D JUMPI POP PUSH21 0x576169744D656D6F727950726F766556616C756573 PUSH1 0x58 SHL JUMPDEST PUSH1 0x2 DUP4 PUSH2 0x1A0 ADD MLOAD PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1030 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x104E JUMPI POP PUSH18 0x2334B734B9B432B221B630B4B6B2B92BB7B7 PUSH1 0x71 SHL JUMPDEST PUSH1 0x3 DUP4 PUSH2 0x1A0 ADD MLOAD PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1061 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1082 JUMPI POP PUSH21 0x2334B734B9B432B221B430B63632B733B2B92BB7B7 PUSH1 0x59 SHL JUMPDEST DUP3 PUSH1 0x0 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD DUP7 PUSH1 0xA0 ADD MLOAD DUP8 PUSH2 0x160 ADD MLOAD DUP9 PUSH2 0x180 ADD MLOAD DUP8 DUP10 SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP POP POP POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1126 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x1190 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0xD DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x3 SLOAD PUSH1 0x9 SWAP1 SWAP4 ADD SLOAD DUP6 MLOAD PUSH4 0x41FDE16F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP5 MLOAD PUSH2 0x124C SWAP6 PUSH1 0xFF SWAP1 SWAP4 AND SWAP5 SWAP2 SWAP4 PUSH1 0x28 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 PUSH4 0x41FDE16F SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x121A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x6 ADD SLOAD PUSH2 0x1F4 PUSH2 0x22FC JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD SLOAD ADD TIMESTAMP GT PUSH2 0x129C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x29F0 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x12BE JUMPI INVALID JUMPDEST EQ PUSH2 0x12FA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2983 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1303 DUP4 PUSH2 0x26FA JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x134D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x13B4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x21B0B73737BA1031329031B0B63632B210313C903AB9B2B9 PUSH1 0x41 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x13D6 JUMPI INVALID JUMPDEST EQ PUSH2 0x1412 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2983 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x8 ADD SLOAD PUSH1 0x4 DUP1 SLOAD DUP5 MLOAD PUSH4 0x43D4B78B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP3 ADD DUP4 SWAP1 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0x43D4B78B SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x146C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1480 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x14D3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2A50 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF154F91D PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP4 ADD DUP5 SWAP1 MSTORE MLOAD PUSH1 0x60 SWAP3 DUP4 SWAP3 DUP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xF154F91D SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1524 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1538 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1561 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x1581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x1596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x15B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15E0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x15C8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x1609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x161E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x163B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1668 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1650 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x1691 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x16A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x16C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x16F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x16D8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE POP POP POP SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP1 PUSH1 0x5 PUSH1 0x0 DUP11 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x3 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x7718D4C8 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 SUB DUP5 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1798 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1780 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP5 DUP2 SUB DUP4 MSTORE DUP7 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x17D7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x17BF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP5 DUP2 SUB DUP3 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1816 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x17FE JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x183E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1852 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1868 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1F6AEA2B PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 DUP4 ADD DUP12 SWAP1 MSTORE MLOAD SWAP4 SWAP6 POP SWAP2 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x3ED5D456 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x18D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4B7A14DD PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 DUP4 ADD DUP12 SWAP1 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP4 POP PUSH4 0x96F429BA SWAP3 POP PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1925 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1939 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x194F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x198C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x29CC PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xFF DUP3 AND ISZERO DUP1 ISZERO PUSH2 0x199D JUMPI POP DUP5 MLOAD DUP2 EQ JUMPDEST DUP1 ISZERO PUSH2 0x1A2D JUMPI POP PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0xC ADD SLOAD PUSH1 0x4 DUP1 SLOAD DUP5 MLOAD PUSH4 0x2419161 PUSH1 0xE6 SHL DUP2 MSTORE SWAP2 DUP3 ADD DUP12 SWAP1 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0x90645840 SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A12 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD EQ ISZERO JUMPDEST ISZERO PUSH2 0x1A3B JUMPI PUSH2 0x1A3B DUP10 PUSH2 0x27C9 JUMP JUMPDEST PUSH2 0x1A44 DUP10 PUSH2 0x26FA JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1A96 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 PUSH2 0xCFA JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1AE2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1B02 JUMPI INVALID JUMPDEST EQ PUSH2 0x1B54 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53746174652073686F756C642062652057616974506172746974696F6E000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0x3 SLOAD DUP4 MLOAD PUSH4 0x32A3A14F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 PUSH4 0x6547429E SWAP3 PUSH1 0x24 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BC4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1BF0 JUMPI PUSH2 0x1BEA DUP4 PUSH2 0x27C9 JUMP JUMPDEST POP PUSH2 0x1CAD JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xD0A068CF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xD0A068CF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1C76 JUMPI PUSH2 0x1BEA DUP4 PUSH2 0x26FA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x32 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2A1E PUSH1 0x32 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP1 DUP1 PUSH1 0x0 DUP1 DUP8 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1CD7 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1D81 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP5 POP SWAP1 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x3 SLOAD DUP5 MLOAD SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP5 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1D37 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD DUP3 MLOAD SWAP1 SWAP2 DUP4 SWAP2 PUSH2 0x1D6C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1E55 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1DA3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1E38 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP3 SWAP5 POP SWAP1 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x4 SLOAD DUP5 MLOAD SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP5 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1E03 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD SLOAD DUP3 MLOAD SWAP1 SWAP2 DUP4 SWAP2 PUSH2 0x1D6C JUMPI INVALID JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE SWAP3 POP SWAP1 POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x1EA1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE DUP3 SWAP1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1ED8 JUMPI INVALID JUMPDEST EQ PUSH2 0x1F2A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53746174652073686F756C642062652057616974506172746974696F6E000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD DUP3 MLOAD PUSH4 0x1D9F2D77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND SWAP3 PUSH4 0x1D9F2D77 SWAP3 PUSH1 0x24 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F9B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1FB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x2004 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446976657267656E63652073686F756C6420626520666F756E64000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH1 0x3 SLOAD DUP3 MLOAD PUSH4 0x326FF2F5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP3 MLOAD SWAP2 SWAP5 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 PUSH4 0x326FF2F5 SWAP3 PUSH1 0x24 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2061 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2075 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x208B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0xA ADD DUP4 SWAP1 SSTORE PUSH1 0x3 SLOAD DUP3 MLOAD PUSH4 0x60696F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE SWAP3 MLOAD SWAP4 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0x60696F81 SWAP3 PUSH1 0x44 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2107 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x211D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0xB ADD SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0x3 SLOAD DUP2 MLOAD PUSH4 0x60696F81 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 DUP6 ADD PUSH1 0x24 DUP3 ADD MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 PUSH4 0x60696F81 SWAP3 PUSH1 0x44 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x219A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0xC DUP2 ADD SWAP5 SWAP1 SWAP5 SSTORE PUSH1 0x4 DUP1 SLOAD DUP6 SLOAD PUSH1 0xB SWAP1 SWAP7 ADD SLOAD DUP4 MLOAD PUSH4 0x1140BC8F PUSH1 0xE3 SHL DUP2 MSTORE ADDRESS SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE SWAP2 MLOAD SWAP5 SWAP1 SWAP2 AND SWAP4 PUSH4 0x8A05E478 SWAP4 PUSH1 0x64 DUP1 DUP5 ADD SWAP5 SWAP4 DUP4 SWAP1 SUB ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x222A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x223E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP2 ADD DUP6 SWAP1 SSTORE PUSH1 0x9 DUP2 ADD SWAP4 SWAP1 SWAP4 SSTORE TIMESTAMP PUSH1 0x7 DUP5 ADD SSTORE PUSH1 0xD SWAP1 SWAP3 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP2 MLOAD DUP9 DUP2 MSTORE SWAP1 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP1 MLOAD PUSH32 0xE6772C68F52FAC01F8694176345AD126EC91D30C32F27A57E8D20C076C2B063D SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 JUMPDEST DUP3 ISZERO PUSH2 0x22E7 JUMPI PUSH1 0x1 SWAP3 SWAP1 SWAP3 SHR SWAP2 PUSH1 0x0 NOT ADD PUSH2 0x22D1 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0xFF SUB DUP2 PUSH2 0x22F4 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x230B JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x23AC JUMPI PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B8798D5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x370F31AA SWAP2 PUSH1 0xA4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x238D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x23A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x243F JUMP JUMPDEST PUSH1 0x1 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x23BA JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x2411 JUMPI PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x84DFD44D PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x24 DUP4 ADD DUP9 SWAP1 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x84DFD44D SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x241F JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x2436 JUMPI POP PUSH1 0x3 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2434 JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0xC6E JUMPI POP PUSH1 0x0 JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2453 PUSH2 0x2910 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH2 0x1C0 DUP2 ADD DUP6 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x1 DUP4 ADD SLOAD DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP5 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x3 DUP1 DUP3 ADD SLOAD SWAP1 SWAP3 AND PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP6 ADD MSTORE SWAP2 DUP3 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x8 DUP3 ADD SLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH1 0x9 DUP3 ADD SLOAD PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0xA DUP3 ADD SLOAD PUSH2 0x140 DUP5 ADD MSTORE PUSH1 0xB DUP3 ADD SLOAD PUSH2 0x160 DUP5 ADD MSTORE PUSH1 0xC DUP3 ADD SLOAD PUSH2 0x180 DUP5 ADD MSTORE PUSH1 0xD DUP3 ADD SLOAD PUSH2 0x1A0 DUP5 ADD SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 DUP2 GT ISZERO PUSH2 0x251D JUMPI INVALID JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2528 JUMPI INVALID JUMPDEST SWAP1 MSTORE POP SWAP1 POP PUSH1 0x0 DUP1 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x254E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x25E1 JUMPI PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0x3 SLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x853F803 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x429FC018 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SUB SWAP2 POP PUSH2 0x5E8 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2603 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x269D JUMPI PUSH1 0x4 DUP1 SLOAD PUSH2 0x100 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xDB1DE419 PUSH1 0xE0 SHL DUP2 MSTORE SWAP4 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP4 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP4 ADD DUP7 SWAP1 MSTORE MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xDB1DE419 SWAP2 PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2668 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x267C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 POP PUSH2 0x5E8 SWAP1 POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x26BF JUMPI INVALID JUMPDEST EQ DUP1 PUSH2 0x26EA JUMPI POP PUSH1 0x3 PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x26E8 JUMPI INVALID JUMPDEST EQ JUMPDEST ISZERO PUSH2 0xC6E JUMPI POP PUSH1 0x0 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x273F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2748 DUP3 PUSH2 0x283A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD DUP1 SLOAD PUSH1 0x2 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD SWAP1 MLOAD PUSH32 0x2B38FC22E74E632DF708AA11EE5B00B21845D40C64CCF39FAFC8EF018B82B9B1 SWAP2 PUSH1 0xFF AND SWAP1 DUP1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x27B5 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x280E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2817 DUP3 PUSH2 0x283A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD DUP1 SLOAD PUSH1 0x3 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH2 0x2767 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x0 SLOAD GT PUSH2 0x287F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x2A73 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH1 0x1 DUP1 DUP4 ADD DUP1 SLOAD DUP4 AND SWAP1 SSTORE PUSH1 0x2 DUP1 DUP5 ADD DUP9 SWAP1 SSTORE PUSH1 0x3 DUP5 ADD DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP3 SSTORE PUSH1 0x4 DUP4 ADD DUP8 SWAP1 SSTORE SWAP5 DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0x6 DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0x7 DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0x8 DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0xA DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0xB DUP3 ADD DUP7 SWAP1 SSTORE PUSH1 0xC SWAP1 SWAP2 ADD DUP6 SWAP1 SSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x1CAD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x1C0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x1A0 DUP3 ADD MSTORE SWAP1 JUMP INVALID MSTORE8 PUSH21 0x6174652073686F756C6420626520576169744D656D PUSH16 0x727950726F766556616C75657346696E PUSH2 0x6C20 PUSH21 0x696D65206D75737420626520677265617465722074 PUSH9 0x616E207A65726F5374 PUSH2 0x7465 KECCAK256 PUSH16 0x66204D4D2073686F756C642062652046 PUSH10 0x6E69736865645265706C PUSH2 0x7944 PUSH22 0x726174696F6E206F6620576169744D656D6F72795072 PUSH16 0x766556616C756573206D757374206265 KECCAK256 PUSH16 0x7665724661696C20746F2057696E4279 POP PUSH2 0x7274 PUSH10 0x74696F6E54696D656F75 PUSH21 0x20696E2063757272656E7420636F6E646974696F6E MSTORE8 PUSH21 0x617465206F66204D4D2073686F756C642062652057 PUSH2 0x6974 PUSH10 0x6E675265706C6179496E PUSH5 0x6578206E6F PUSH21 0x20696E7374616E7469617465640000000000000000 STOP STOP LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 SELFBALANCE 0x2A 0xEB PUSH14 0x1FAFBA8DA23AF46B1F47BE1F9E1E CHAINID ORIGIN CODESIZE PUSH19 0x8F2F918C3EE872304964736F6C634300070400 CALLER ",
      "sourceMap": "1510:21106:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22094:177;;;;;;;;;;;;;;;;-1:-1:-1;22094:177:11;;:::i;:::-;;;;;;;;;;;;;;;;14471:191;;;;;;;;;;;;;;;;-1:-1:-1;14471:191:11;;;;;;-1:-1:-1;;;;;14471:191:11;;:::i;:::-;;;;;;;;;;;;;;;;;;21920:168;;;;;;;;;;;;;;;;-1:-1:-1;21920:168:11;;:::i;5211:1594::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5211:1594:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;729:31:2:-;;;:::i;17392:824:11:-;;;;;;;;;;;;;;;;-1:-1:-1;17392:824:11;;;;;;;;;;;;;;;;;;;;;;:::i;1405:186:2:-;;;;;;;;;;;;;;;;-1:-1:-1;1405:186:2;;:::i;12075:427:11:-;;;;;;;;;;;;;;;;-1:-1:-1;12075:427:11;;:::i;19078:676::-;;;;;;;;;;;;;;;;-1:-1:-1;19078:676:11;;:::i;20251:201::-;;;;;;;;;;;;;;;;-1:-1:-1;20251:201:11;;:::i;12508:1957::-;;;;;;;;;;;;;;;;-1:-1:-1;12508:1957:11;;;;;;-1:-1:-1;;;;;12508:1957:11;;:::i;:::-;;;;;-1:-1:-1;;;;;12508:1957:11;;;;;;-1:-1:-1;;;;;12508:1957:11;;;;;;-1:-1:-1;;;;;12508:1957:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1289:110:2;;;;;;;;;;;;;;;;-1:-1:-1;1289:110:2;;:::i;10990:1058:11:-;;;;;;;;;;;;;;;;-1:-1:-1;10990:1058:11;;:::i;:::-;;9684:1175;;;;;;;;;;;;;;;;-1:-1:-1;9684:1175:11;;:::i;20458:207::-;;;;;;;;;;;;;;;;-1:-1:-1;20458:207:11;;:::i;7085:600::-;;;;;;;;;;;;;;;;-1:-1:-1;7085:600:11;;:::i;18222:850::-;;;;;;;;;;;;;;;;-1:-1:-1;18222:850:11;;;;;;-1:-1:-1;;;;;18222:850:11;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8100:1272;;;;;;;;;;;;;;;;-1:-1:-1;8100:1272:11;;:::i;22359:255::-;;;;;;;;;;;;;;;;-1:-1:-1;22359:255:11;;:::i;22094:177::-;22197:9;;22171:7;22229:16;;;:8;:16;;;;;;;;:34;;;22197:67;;-1:-1:-1;;;22197:67:11;;;;;;;;;;;22171:7;;-1:-1:-1;;;;;22197:9:11;;:31;;:67;;;;;22229:16;;22197:67;;;;;;:9;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22197:67:11;;22094:177;-1:-1:-1;;22094:177:11:o;14471:191::-;14553:4;14578:16;;;:8;:16;;;;;:27;-1:-1:-1;;;;;14578:36:11;;;:27;;:36;;14577:77;;-1:-1:-1;14620:16:11;;;;:8;:16;;;;;:24;;;-1:-1:-1;;;;;14620:33:11;;;:24;;:33;14577:77;14569:86;14471:191;-1:-1:-1;;;14471:191:11:o;21920:168::-;22023:9;;21997:7;22046:16;;;:8;:16;;;;;;;;:34;;;22023:58;;-1:-1:-1;;;22023:58:11;;;;;;;;;;;21997:7;;-1:-1:-1;;;;;22023:9:11;;:22;;:58;;;;;22046:16;;22023:58;;;;;;:9;:58;;;;;;;;;;5211:1594;5465:7;5509:1;5496:10;:14;5488:63;;;;-1:-1:-1;;;5488:63:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5561:22;5570:12;;5561:22;;:8;:22;;;;;;:47;;-1:-1:-1;;;;;5561:47:11;;;-1:-1:-1;;;;;;5561:47:11;;;;;;;5627:12;;5618:22;;;;;;5561:47;5618:30;:41;;;;;;;;;;;;;;;5725:23;5737:10;5725:11;:23::i;:::-;5669:22;5678:12;;5669:22;;:8;:22;;;;;;;;5751:1;5708:40;;;:44;;5669:36;;;;:83;5771:12;;5762:22;;;;;:30;;;;:66;;-1:-1:-1;;;;;5762:66:11;;;-1:-1:-1;;;;;;5762:66:11;;;;;;;;;;5847:12;;5838:22;;;;;:34;;:49;;;5906:12;;5897:22;;;;;:39;;;:59;;;5975:12;;5966:22;;;;;:32;;:45;;;6030:12;;6021:22;;;;;6061:15;6021:37;;;;:55;6129:9;:203;;-1:-1:-1;;;6129:203:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6292:2;6129:203;;;;;;;;;;;;:9;;;:21;;:203;;;;;;;;;;;;;:9;:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6129:203:11;6086:22;6095:12;;6086:22;;:8;6129:203;6086:22;;;;;:40;;:246;;;;6351:12;;6342:22;;;;;:35;;:57;;-1:-1:-1;;6342:57:11;;;6437:12;6414:314;;6463:11;6488:8;6527:23;6539:10;6527:11;:23::i;:::-;6678:22;6687:12;;6678:22;;:8;:22;;;;;;;;;:40;;;6414:314;;;;;-1:-1:-1;;;;;6414:314:11;;;;;;;;;;;;;;;;;6553:1;6510:40;;;:44;;;;6414:314;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6739:20:11;6746:12;;6739:20;;6762:4;6739:20;;;;;;;:27;;-1:-1:-1;;6739:27:11;;;;;6783:14;;;;;;;;5211:1594;;;;;;;;;:::o;729:31:2:-;;;;:::o;17392:824:11:-;17622:7;17645:29;17677:209;17710:19;17743:14;17771:19;17804:14;17832:9;17855:21;17677:19;:209::i;:::-;17645:241;;17897:29;17929:217;17962:27;18003:14;18031:19;18064:14;18092:9;18115:21;17929:19;:217::i;:::-;18164:45;;;;;17392:824;-1:-1:-1;;;;;;;17392:824:11:o;1405:186:2:-;1528:20;1503:6;1081;1066:12;;:21;1058:56;;;;;-1:-1:-1;;;1058:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1058:56:2;;;;;;;;;;;;;;;1132:16;1141:6;1132:8;:16::i;:::-;1124:43;;;;;-1:-1:-1;;;1124:43:2;;;;;;;;;;;;-1:-1:-1;;;1124:43:2;;;;;;;;;;;;;;;1571:13:::1;::::0;;;:5:::1;:13;::::0;;;;;;-1:-1:-1;1177:1:2::1;1405:186:::0;;;;:::o;12075:427:11:-;12183:9;12158:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;12208:14:11::1;;:::i;:::-;12225:16;::::0;;;:8:::1;:16;::::0;;;;;;;;12208:33;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;12208:33:11;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;12277:218;12310:6;12330:1;:15;;;12359:2;12277:19;:218::i;:::-;12258:16;::::0;;::::1;::::0;:237:::1;::::0;12075:427;-1:-1:-1;;;12075:427:11:o;19078:676::-;19190:7;19165:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;19250:19:11::1;19217:16:::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:52;::::0;::::1;;;;;;;19213:105;;;-1:-1:-1::0;;;19285:22:11::1;;;;19213:105;19364:27;19331:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:60;::::0;::::1;;;;;;;19327:121;;;-1:-1:-1::0;;;19407:30:11::1;;;;19327:121;19494:24;19461:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:57;::::0;::::1;;;;;;;19457:115;;;-1:-1:-1::0;;;19534:27:11::1;;;;19457:115;19618:27;19585:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:60;::::0;::::1;;;;;;;19581:121;;;-1:-1:-1::0;;;19661:30:11::1;;;;19581:121;19711:36;::::0;;-1:-1:-1;;;19711:36:11;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19711:36:11;;;;;;;;;;;;;::::1;20251:201:::0;20373:4;20348:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;20425:24:11::1;20392:57;:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:57;::::0;::::1;;;;;;;::::0;20251:201;-1:-1:-1;;;20251:201:11:o;12508:1957::-;12614:19;12651:16;12685:25;12728:20;12766:25;12809:29;12856:28;12902:21;12941:25;12588:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;12982:14:11::1;;:::i;:::-;12999:16;::::0;;;:8:::1;:16;::::0;;;;;;;;12982:33;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;12982:33:11;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;::::1;;;;;;;;;;;;;;::::0;;-1:-1:-1;13053:13:11::1;::::0;;13064:1:::1;13053:13:::0;;;;;::::1;::::0;;;12982:33;;-1:-1:-1;13026:24:11::1;::::0;13053:13;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;13053:13:11::1;13026:40;;13092:1;:11;;;13076:10;13087:1;13076:13;;;;;;;;;;;;;:27;;;::::0;::::1;13148:293;13185:1;:14;;;13217:1;:15;;;13250:2;13295:9;;;;;;;;;-1:-1:-1::0;;;;;13295:9:11::1;-1:-1:-1::0;;;;;13295:22:11::1;;13318:1;:19;;;13295:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13295:43:11;13356:11:::1;::::0;::::1;::::0;13396:3:::1;13148:19;:293::i;:::-;13129:1;:16;;;:312;13113:10;13124:1;13113:13;;;;;;;;;;;;;:328;;;::::0;::::1;13478:1;:12;;;13462:10;13473:1;13462:13;;;;;;;;;;;;;:28;;;::::0;::::1;13516:1;:19;;;13500:10;13511:1;13500:13;;;;;;;;;;;;;:35;;;::::0;::::1;13561:1;:16;;;13545:10;13556:1;13545:13;;;;;;;;;::::0;;::::1;::::0;;;;;:32;13688:20:::1;::::0;13722:1:::1;:14;;;:37;;;;;;;;;13718:98;;;-1:-1:-1::0;;;;13718:98:11::1;13847:27;13829:1;:14;;;:45;;;;;;;;;13825:114;;;-1:-1:-1::0;;;;13825:114:11::1;13970:24;13952:1;:14;;;:42;;;;;;;;;13948:108;;;-1:-1:-1::0;;;;13948:108:11::1;14087:27;14069:1;:14;;;:45;;;;;;;;;14065:114;;;-1:-1:-1::0;;;;14065:114:11::1;14210:1;:12;;;14236:1;:9;;;14259:1;:9;;;14282:1;:13;;;14309:1;:18;;;14341:1;:22;;;14377:1;:21;;;14412:12;14438:10;14189:269;;;;;;;;;;;;;;;;;;;;;12508:1957:::0;;;;;;;;;;;;:::o;1289:110:2:-;1353:4;1377:14;;;:6;:14;;;;;;;;;1289:110::o;10990:1058:11:-;11075:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;11098:16:11::1;::::0;;;:8:::1;:16;::::0;;;;:24:::1;;::::0;-1:-1:-1;;;;;11098:24:11::1;834:10:0;:18:::0;::::1;826:55;;;::::0;;-1:-1:-1;;;826:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;826:55:0;;;;;;;;;;;;;::::1;;11528:16:11::2;::::0;;;:8:::2;:16;::::0;;;;;;;;:29:::2;::::0;::::2;::::0;11575:30:::2;::::0;::::2;::::0;11668:9:::2;::::0;11691:34:::2;::::0;;::::2;::::0;11668:58;;-1:-1:-1;;;11668:58:11;;::::2;::::0;::::2;::::0;;;;;;11491:349:::2;::::0;11528:29:::2;::::0;;::::2;::::0;11575:30;;11623:2:::2;::::0;-1:-1:-1;;;;;11668:9:11;;::::2;::::0;:22:::2;::::0;:58;;;;;;;;;;:9;:58;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;11668:58:11;11744:16:::2;::::0;;;:8:::2;11668:58;11744:16:::0;;;;:26:::2;;::::0;11799:3:::2;11491:19;:349::i;:::-;11457:16;::::0;;;:8:::2;:16;::::0;;;;:31:::2;;::::0;:383:::2;11439:15;:401;11418:473;;;;-1:-1:-1::0;;;11418:473:11::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11943:27;11910:16;::::0;;;:8:::2;:16;::::0;;;;:29:::2;;::::0;::::2;;:60;::::0;::::2;;;;;;;11902:110;;;;-1:-1:-1::0;;;11902:110:11::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12022:19;12034:6;12022:11;:19::i;:::-;989:1:2::1;10990:1058:11::0;;:::o;9684:1175::-;9773:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;9796:16:11::1;::::0;;;:8:::1;:16;::::0;;;;:27;-1:-1:-1;;;;;9796:27:11::1;834:10:0;:18:::0;::::1;826:55;;;::::0;;-1:-1:-1;;;826:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;826:55:0;;;;;;;;;;;;;::::1;;9880:27:11::2;9847:16;::::0;;;:8:::2;:16;::::0;;;;:29:::2;;::::0;::::2;;:60;::::0;::::2;;;;;;;9839:110;;;;-1:-1:-1::0;;;9839:110:11::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9959:15;9977:16:::0;;;:8:::2;:16;::::0;;;;;;;;:27:::2;;::::0;10022:2:::2;::::0;;:32;;-1:-1:-1;;;10022:32:11;;;;::::2;::::0;;;;;9977:27;;-1:-1:-1;;;;;10022:2:11::2;::::0;:23:::2;::::0;:32;;;;;;;;;;:2;:32;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;10022:32:11;10014:80:::2;;;;-1:-1:-1::0;;;10014:80:11::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10228:2;::::0;;:23:::2;::::0;;-1:-1:-1;;;10228:23:11;;;;::::2;::::0;;;;10119:25:::2;::::0;;;;;-1:-1:-1;;;;;10228:2:11;;::::2;::::0;:14:::2;::::0;:23;;;;;:2:::2;::::0;:23;;;;;;;:2;:23;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;;::::2;-1:-1:-1::0;;10228:23:11::2;::::0;::::2;;::::0;::::2;::::0;::::2;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;::::0;;-1:-1:-1;10228:23:11;;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;::::0;;-1:-1:-1;10228:23:11;;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;::::0;;-1:-1:-1;10228:23:11;;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;::::0;::::2;;10105:146;;;;;;10263:14;10279:22:::0;10305:8:::2;:16;10314:6;10305:16;;;;;;;;;;;:24;;;;;;;;;;-1:-1:-1::0;;;;;10305:24:11::2;-1:-1:-1::0;;;;;10305:29:11::2;;10335:9;10346:6;10354:7;10305:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;10305:57:11;;::::2;::::0;;::::2;::::0;10373:2:::2;::::0;;10305:57;10373:29;;-1:-1:-1;;;10373:29:11;;;;::::2;::::0;;;;10305:57;;-1:-1:-1;10305:57:11;;-1:-1:-1;;;;;;10373:2:11;;::::2;::::0;:20:::2;::::0;:29;;;;;:2:::2;::::0;:29;;;;;;;;:2;;:29;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;10421:2:11::2;::::0;;:33:::2;::::0;;-1:-1:-1;;;10421:33:11;;;;::::2;::::0;;;;-1:-1:-1;;;;;10421:2:11;;::::2;::::0;-1:-1:-1;10421:24:11::2;::::0;-1:-1:-1;10421:33:11;;;;;::::2;::::0;;;;;;;;:2;:33;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;10421:33:11;10413:82:::2;;;;-1:-1:-1::0;;;10413:82:11::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10518:13;::::0;::::2;::::0;:87;::::2;;;;10589:9;:16;10571:14;:34;10518:87;:198;;;;-1:-1:-1::0;10680:16:11::2;::::0;;;:8:::2;:16;::::0;;;;;;;;:36:::2;;::::0;10657:2:::2;::::0;;:19;;-1:-1:-1;;;10657:19:11;;;;::::2;::::0;;;;;10680:36;;-1:-1:-1;;;;;10657:2:11::2;::::0;:10:::2;::::0;:19;;;;;;;;;;:2;:19;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;10657:19:11;:59:::2;;10518:198;10514:310;;;10791:22;10806:6;10791:14;:22::i;:::-;10833:19;10845:6;10833:11;:19::i;:::-;891:1:0;;;;;;989::2::1;9684:1175:11::0;;:::o;20458:207::-;20583:4;20558:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;20635:27:11::1;20602:60;::::0;7085:600;7173:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;7236:19:11::1;7203:16:::0;;;:8:::1;:16;::::0;;;;:29:::1;;::::0;::::1;;:52;::::0;::::1;;;;;;;7195:94;;;::::0;;-1:-1:-1;;;7195:94:11;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7299:22;7324:16:::0;;;:8:::1;:16;::::0;;;;;;;;:34:::1;;::::0;7372:9:::1;::::0;:46;;-1:-1:-1;;;7372:46:11;;::::1;::::0;::::1;::::0;;;;;7324:34;;-1:-1:-1;;;;;7372:9:11;;::::1;::::0;:30:::1;::::0;:46;;;;;;;;;;:9;:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7372:46:11;7368:119:::1;;;7434:22;7449:6;7434:14;:22::i;:::-;7470:7;;;7368:119;7500:9;::::0;:43:::1;::::0;;-1:-1:-1;;;7500:43:11;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;7500:9:11;;::::1;::::0;:27:::1;::::0;:43;;;;;::::1;::::0;;;;;;;;;:9;:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7500:43:11;7496:113:::1;;;7559:19;7571:6;7559:11;:19::i;7496:113::-;7618:60;;-1:-1:-1::0;;;7618:60:11::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;989:1:2;7085:600:11::0;;:::o;18222:850::-;18310:27;;;;18501:19;18468:16;;;;:8;:16;;;;;:29;;;;;:52;;;;;;;;;18464:258;;;18540:16;;;18554:1;18540:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18574:16:11;;;18588:1;18574:16;;;;;;;;;18536:20;;-1:-1:-1;18588:1:11;-1:-1:-1;18574:16:11;;;;;;;;;-1:-1:-1;;18619:9:11;;18604:4;;18570:20;;-1:-1:-1;;;;;;18619:9:11;;18604:4;;-1:-1:-1;18619:9:11;;18604:4;;;;-1:-1:-1;;;;;18604:25:11;;;:4;;;;;;;;;;:25;18650:16;;;;:8;:16;;;;;;:34;;;18643:4;;18650:34;;18643:1;;:4;;;;;;;;;;;;;:41;18706:1;;-1:-1:-1;18709:1:11;-1:-1:-1;18698:13:11;;18464:258;18768:27;18735:16;;;;:8;:16;;;;;:29;;;;;:60;;;;;;;;;18731:252;;;18815:16;;;18829:1;18815:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18849:16:11;;;18863:1;18849:16;;;;;;;;;18811:20;;-1:-1:-1;18863:1:11;-1:-1:-1;18849:16:11;;;;;;;;;-1:-1:-1;;18894:2:11;;18879:4;;18845:20;;-1:-1:-1;;;;;;18894:2:11;;18879:4;;-1:-1:-1;18894:2:11;;18879:4;;;;-1:-1:-1;;;;;18879:18:11;;;:4;;;;;;;;;;:18;18918:16;;;;:8;:16;;;;;;:27;;;18911:4;;18918:27;;18911:1;;:4;;;18731:252;-1:-1:-1;;18996:16:11;;;19010:1;18996:16;;;;;;19026;;;;;;;;;18996;-1:-1:-1;18996:16:11;-1:-1:-1;18222:850:11;;;;;;:::o;8100:1272::-;8191:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;1250:13:::1;::::0;;;:5:::1;:13;::::0;;;;:15;;::::1;;::::0;;8222:6:11;;8252:16:::2;::::0;;;:8:::2;:16;::::0;;;;:29:::2;;::::0;::::2;;:52;::::0;::::2;;;;;;;8244:94;;;::::0;;-1:-1:-1;;;8244:94:11;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;8356:9;::::0;::::2;8389:16:::0;;;:8:::2;:16;::::0;;;;;;;;:34:::2;;::::0;8356:68;;-1:-1:-1;;;8356:68:11;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;;;;;8356:9:11;;::::2;::::0;:32:::2;::::0;:68;;;;;8389:16;8356:68;;;;;;:9;:68;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;8356:68:11;8348:107:::2;;;::::0;;-1:-1:-1;;;8348:107:11;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;8465:22;8490:16:::0;;;:8:::2;:16;::::0;;;;;;;:34:::2;;::::0;8556:9:::2;::::0;:40;;-1:-1:-1;;;8556:40:11;;::::2;::::0;::::2;::::0;;;;;8490:34;;8465:22;-1:-1:-1;;;;;8556:9:11;;::::2;::::0;:24:::2;::::0;:40;;;;;8490:16;8556:40;;;;;:9;:40;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;8556:40:11;8606:16:::2;::::0;;;:8:::2;8556:40;8606:16:::0;;;;;;;;:31:::2;;:48:::0;;;8704:9:::2;::::0;:50;;-1:-1:-1;;;8704:50:11;;::::2;::::0;::::2;::::0;;;;;;;;;;;8556:40;;-1:-1:-1;;;;;;8704:9:11::2;::::0;:18:::2;::::0;:50;;;;;8556:40;8704:50;;;;;;:9;:50;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;8704:50:11;8664:16:::2;::::0;;;:8:::2;8704:50;8664:16:::0;;;;;;;;:37:::2;;:90:::0;;;;8803:9:::2;::::0;:54;;-1:-1:-1;;;8803:54:11;;::::2;::::0;::::2;::::0;;;:9;8838:18;::::2;8803:54:::0;;;;;;-1:-1:-1;;;;;8803:9:11;;::::2;::::0;:18:::2;::::0;:54;;;;;;;;;;;:9;:54;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;8803:54:11;8764:16:::2;::::0;;;:8:::2;8803:54;8764:16:::0;;;;;;;:36:::2;::::0;::::2;:93:::0;;;;8897:2:::2;::::0;;8952:27;;8993:37:::2;::::0;;::::2;::::0;8897:143;;-1:-1:-1;;;8897:143:11;;8933:4:::2;8897:143:::0;;::::2;::::0;;;;-1:-1:-1;;;;;8952:27:11;;::::2;8897:143:::0;;;;;;;;;;:2;;;::::2;::::0;:14:::2;::::0;:143;;;;;8803:54;8897:143;;;;;;;:2;:143;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;8897:143:11;8867:16:::2;::::0;;;:8:::2;8897:143;8867:16:::0;;;;;;;:27:::2;::::0;::::2;:173:::0;;;9127:34:::2;::::0;::::2;9120:41:::0;;;;9205:15:::2;9171:31;::::0;::::2;:49:::0;9230:29:::2;::::0;;::::2;:59:::0;;-1:-1:-1;;9230:59:11::2;-1:-1:-1::0;9230:59:11::2;::::0;;9304:61;;;;;;;::::2;::::0;;;;;;::::2;::::0;;;;;;;;::::2;1275:1:2;;989::::1;8100:1272:11::0;;:::o;22359:255::-;22409:6;22441:3;22455:73;22462:6;;22455:73;;22493:1;22488:6;;;;;-1:-1:-1;;22508:9:11;22455:73;;;22606:1;22595:7;22589:3;:13;22588:19;;;;;;;22359:255;-1:-1:-1;;;22359:255:11:o;16194:848::-;16440:7;;16523:6;:29;;;;;;;;;16519:186;;;16575:9;;:119;;;-1:-1:-1;;;16575:119:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16575:9:11;;;;:32;;:119;;;;;;;;;;;;;;;:9;:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16575:119:11;;-1:-1:-1;16568:126:11;;16519:186;16728:27;16718:6;:37;;;;;;;;;16714:137;;;16778:2;;;:62;;;-1:-1:-1;;;16778:62:11;;;;;;;;;;;;;;;-1:-1:-1;;;;;16778:2:11;;;;:25;;:62;;;;;;;;;;;;;;:2;:62;;;;;;;;;;16714:137;16875:24;16865:6;:34;;;;;;;;;:75;;;-1:-1:-1;16913:27:11;16903:6;:37;;;;;;;;;16865:75;16861:129;;;-1:-1:-1;16963:1:11;16999:36;16194:848;;;;;;;;:::o;14668:872::-;14822:7;14845:14;;:::i;:::-;14862:16;;;;:8;:16;;;;;;;;;14845:33;;;;;;;;;-1:-1:-1;;;;;14845:33:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14845:33:11;-1:-1:-1;14981:19:11;14948:16;;;;:8;:16;;;;;:29;;;;;:52;;;;;;;;;14944:163;;;15080:16;;;;15023:9;;15057:19;;;;15023:54;;;-1:-1:-1;;;15023:54:11;;;;;;;;;;-1:-1:-1;;;;;15023:9:11;;;;:33;;:54;;;;;;;;;;;;;;;:9;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15023:54:11;:73;;-1:-1:-1;15016:80:11;;-1:-1:-1;15016:80:11;14944:163;15153:27;15120:16;;;;:8;:16;;;;;:29;;;;;:60;;;;;;;;;15116:175;;;15203:2;;;;15230:12;;;15203:77;;;-1:-1:-1;;;15203:77:11;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15203:2:11;;;;:26;;:77;;;;;;;;;;;;;;:2;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15203:77:11;;-1:-1:-1;15196:84:11;;-1:-1:-1;15196:84:11;15116:175;15338:24;15305:16;;;;:8;:16;;;;;:29;;;;;:57;;;;;;;;;:133;;;-1:-1:-1;15411:27:11;15378:16;;;;:8;:16;;;;;:29;;;;;:60;;;;;;;;;15305:133;15301:187;;;-1:-1:-1;15461:1:11;;14668:872;-1:-1:-1;;;;14668:872:11:o;21672:242::-;21742:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;21764:21:11::1;21778:6;21764:13;:21::i;:::-;21795:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;:56:::0;;21827:24:::1;::::0;21795:29;-1:-1:-1;;21795:56:11::1;::::0;21827:24;21795:56:::1;;;::::0;;-1:-1:-1;21877:16:11::1;::::0;;;:8:::1;:16;::::0;;;;;;:29:::1;;::::0;21866:41;;::::1;::::0;21877:29:::1;;::::0;21866:41;21877:29;21866:41:::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;21672:242:::0;;:::o;21418:248::-;21491:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;21513:21:11::1;21527:6;21513:13;:21::i;:::-;21544:16;::::0;;;:8:::1;:16;::::0;;;;:29:::1;;:59:::0;;21576:27:::1;::::0;21544:29;-1:-1:-1;;21544:59:11::1;::::0;21576:27;21544:59:::1;::::0;20671:741;20744:6;946::2;931:12;;:21;923:56;;;;;-1:-1:-1;;;923:56:2;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;923:56:2;;;;;;;;;;;;;;;20773:16:11::1;::::0;;;:8:::1;:16;::::0;;;;;;;20766:34;;-1:-1:-1;;;;;;20766:34:11;;::::1;::::0;;-1:-1:-1;20817:24:11;;::::1;20810:31:::0;;;::::1;::::0;;20858:30:::1;::::0;;::::1;20851:37:::0;;;20905:24:::1;::::0;::::1;20898:31:::0;;;;::::1;::::0;;;20946:28:::1;::::0;::::1;20939:35:::0;;;20991:33;;::::1;20984:40:::0;;;21041:26:::1;::::0;::::1;21034:33:::0;;;21084:31:::1;::::0;::::1;21077:38:::0;;;21195:27:::1;::::0;::::1;21188:34:::0;;;21239:31:::1;::::0;::::1;21232:38:::0;;;21287:37:::1;::::0;::::1;21280:44:::0;;;21341:36:::1;::::0;;::::1;21334:43:::0;;;1652:14:2;;;;;;:22;;-1:-1:-1;;1652:22:2;;;1684:13;;;;;:17;21387:18:11::1;1597:111:2:o:0;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"
    },
    "gasEstimates": {
      "creation": {
        "codeDepositCost": "2190400",
        "executionCost": "infinite",
        "totalCost": "infinite"
      },
      "external": {
        "claimVictoryByTime(uint256)": "infinite",
        "currentIndex()": "1021",
        "getCurrentState(uint256)": "infinite",
        "getCurrentStateDeadline(uint256)": "infinite",
        "getMaxInstanceDuration(uint256,uint256,uint256,uint256,uint256)": "infinite",
        "getNonce(uint256)": "infinite",
        "getPartitionGameIndex(uint256)": "infinite",
        "getPartitionQuerySize(uint256)": "infinite",
        "getState(uint256,address)": "infinite",
        "getSubInstances(uint256,address)": "infinite",
        "instantiate(address,address,uint256,address,bytes32,bytes32,uint256)": "infinite",
        "isActive(uint256)": "1185",
        "isConcerned(uint256,address)": "2160",
        "log2OverTwo(uint256)": "infinite",
        "settleVerificationGame(uint256)": "infinite",
        "startMachineRunChallenge(uint256)": "infinite",
        "stateIsFinishedChallengerWon(uint256)": "infinite",
        "stateIsFinishedClaimerWon(uint256)": "infinite",
        "winByPartitionTimeout(uint256)": "infinite"
      },
      "internal": {
        "challengerWins(uint256)": "infinite",
        "claimerWins(uint256)": "infinite",
        "clearInstance(uint256)": "infinite",
        "getMaxStateDuration(enum VGInterface.state,uint256,uint256,uint256,uint256,uint256)": "infinite",
        "getMaxStateDuration(uint256,uint256,uint256)": "infinite"
      }
    },
    "methodIdentifiers": {
      "claimVictoryByTime(uint256)": "a2dc7973",
      "currentIndex()": "26987b60",
      "getCurrentState(uint256)": "5748c130",
      "getCurrentStateDeadline(uint256)": "429fc018",
      "getMaxInstanceDuration(uint256,uint256,uint256,uint256,uint256)": "370f31aa",
      "getNonce(uint256)": "3d46b819",
      "getPartitionGameIndex(uint256)": "00446386",
      "getPartitionQuerySize(uint256)": "0c91927b",
      "getState(uint256,address)": "73df1612",
      "getSubInstances(uint256,address)": "c526656c",
      "instantiate(address,address,uint256,address,bytes32,bytes32,uint256)": "20b73870",
      "isActive(uint256)": "82afd23b",
      "isConcerned(uint256,address)": "01ff62ab",
      "log2OverTwo(uint256)": "daaadf4e",
      "settleVerificationGame(uint256)": "a703df28",
      "startMachineRunChallenge(uint256)": "cd3784e7",
      "stateIsFinishedChallengerWon(uint256)": "b6b5c319",
      "stateIsFinishedClaimerWon(uint256)": "6cc9f17e",
      "winByPartitionTimeout(uint256)": "bfa69ed8"
    }
  },
  "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_partitionInstantiatorAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mmInstantiatorAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"MemoryWriten\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_mmInstance\",\"type\":\"uint256\"}],\"name\":\"PartitionDivergenceFound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_roundDuration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_machineAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_initialHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_claimerFinalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_finalTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_partitionInstance\",\"type\":\"uint256\"}],\"name\":\"VGCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum VGInterface.state\",\"name\":\"_finalState\",\"type\":\"uint8\"}],\"name\":\"VGFinished\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"claimVictoryByTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getCurrentState\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getCurrentStateDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_roundDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeToStartMachine\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partitionSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxCycle\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_picoSecondsToRunInsn\",\"type\":\"uint256\"}],\"name\":\"getMaxInstanceDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getPartitionGameIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getPartitionQuerySize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"},{\"internalType\":\"contract MachineInterface\",\"name\":\"_machine\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_initialHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_claimerFinalHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_hashBeforeDivergence\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_hashAfterDivergence\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_currentState\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"_uintValues\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getSubInstances\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_indices\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_roundDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_machineAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_initialHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_claimerFinalHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_finalTime\",\"type\":\"uint256\"}],\"name\":\"instantiate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"isConcerned\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"log2OverTwo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"settleVerificationGame\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"startMachineRunChallenge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsFinishedChallengerWon\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"stateIsFinishedClaimerWon\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"winByPartitionTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getMaxInstanceDuration(uint256,uint256,uint256,uint256,uint256)\":{\"params\":{\"_maxCycle\":\"is the maximum amount of steps a machine can perform\"}},\"instantiate(address,address,uint256,address,bytes32,bytes32,uint256)\":{\"params\":{\"_challenger\":\"address of the challenger.\",\"_claimer\":\"address of the claimer.\",\"_claimerFinalHash\":\"final hash claimed by claimer\",\"_finalTime\":\"max cycle of the machine for that computation\",\"_initialHash\":\"hash in which both claimer and challenger agree on\",\"_machineAddress\":\"address of the machine that will run the instruction\",\"_roundDuration\":\"duration of the round (security param)\"},\"returns\":{\"_0\":\"VG index.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"claimVictoryByTime(uint256)\":{\"notice\":\"Claimer can claim victory if challenger has lost the deadline for some of the steps in the protocol.\"},\"instantiate(address,address,uint256,address,bytes32,bytes32,uint256)\":{\"notice\":\"Instantiate a vg instance.\"},\"settleVerificationGame(uint256)\":{\"notice\":\"After having filled the memory manager with the necessary data, the provider calls this function to instantiate the machine and perform one step on it. The machine will write to memory now. Later, the provider will be expected to update the memory hash accordingly.\"},\"startMachineRunChallenge(uint256)\":{\"notice\":\"After the partition challenge has lead to a divergence in the hash within one time step, anyone can start a mechine run challenge to decide whether the claimer was correct about that particular step transition. This function call solely instantiate a memory manager, so the provider must fill the appropriate addresses that will be read by the machine.\"},\"winByPartitionTimeout(uint256)\":{\"notice\":\"In case one of the parties wins the partition challenge by timeout, then he or she can call this function to claim victory in the hireCPU contract as well.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/VGInstantiator.sol\":\"VGInstantiator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@cartesi/util/contracts/Decorated.sol\":{\"content\":\"// Copyright 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: Apache-2.0\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use\\n// this file except in compliance with the License. You may obtain a copy of the\\n// License at http://www.apache.org/licenses/LICENSE-2.0\\n\\n// Unless required by applicable law or agreed to in writing, software distributed\\n// under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR\\n// CONDITIONS OF ANY KIND, either express or implied. See the License for the\\n// specific language governing permissions and limitations under the License.\\n\\npragma solidity ^0.7.0;\\n\\n\\ncontract Decorated {\\n    // This contract defines several modifiers but does not use\\n    // them - they will be used in derived contracts.\\n    modifier onlyBy(address user) {\\n        require(msg.sender == user, \\\"Cannot be called by user\\\");\\n        _;\\n    }\\n\\n    modifier onlyAfter(uint256 time) {\\n        require(block.timestamp > time, \\\"Cannot be called now\\\");\\n        _;\\n    }\\n}\\n\",\"keccak256\":\"0xdbba019b8f7f93b212a5bbae402ee988321c4fa82ed2b4c9e55b4d7ddf35dcc3\",\"license\":\"Apache-2.0\"},\"@cartesi/util/contracts/Instantiator.sol\":{\"content\":\"// Copyright 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: Apache-2.0\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use\\n// this file except in compliance with the License. You may obtain a copy of the\\n// License at http://www.apache.org/licenses/LICENSE-2.0\\n\\n// Unless required by applicable law or agreed to in writing, software distributed\\n// under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR\\n// CONDITIONS OF ANY KIND, either express or implied. See the License for the\\n// specific language governing permissions and limitations under the License.\\n\\n\\npragma solidity ^0.7.0;\\n\\n\\ninterface Instantiator {\\n\\n    modifier onlyInstantiated(uint256 _index) virtual;\\n\\n    modifier onlyActive(uint256 _index) virtual;\\n\\n    modifier increasesNonce(uint256 _index) virtual;\\n\\n    function isActive(uint256 _index) external view returns (bool);\\n\\n    function getNonce(uint256 _index) external view returns (uint256);\\n\\n    function isConcerned(uint256 _index, address _user) external view returns (bool);\\n\\n    function getSubInstances(uint256 _index, address) external view returns (address[] memory _addresses, uint256[] memory _indices);\\n}\\n\",\"keccak256\":\"0x416e612dc09b10765de32ec06cf0a7ee4e050e16db8bf3b8ad832a6082b7dfd6\",\"license\":\"Apache-2.0\"},\"@cartesi/util/contracts/InstantiatorImpl.sol\":{\"content\":\"// Copyright 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: Apache-2.0\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use\\n// this file except in compliance with the License. You may obtain a copy of the\\n// License at http://www.apache.org/licenses/LICENSE-2.0\\n\\n// Unless required by applicable law or agreed to in writing, software distributed\\n// under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR\\n// CONDITIONS OF ANY KIND, either express or implied. See the License for the\\n// specific language governing permissions and limitations under the License.\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"./Instantiator.sol\\\";\\n\\nabstract contract InstantiatorImpl is Instantiator {\\n    uint256 public currentIndex = 0;\\n\\n    mapping(uint256 => bool) internal active;\\n    mapping(uint256 => uint256) internal nonce;\\n\\n    modifier onlyInstantiated(uint256 _index) override {\\n        require(currentIndex > _index, \\\"Index not instantiated\\\");\\n        _;\\n    }\\n\\n    modifier onlyActive(uint256 _index) override {\\n        require(currentIndex > _index, \\\"Index not instantiated\\\");\\n        require(isActive(_index), \\\"Index inactive\\\");\\n        _;\\n    }\\n\\n    modifier increasesNonce(uint256 _index) override {\\n        nonce[_index]++;\\n        _;\\n    }\\n\\n    function isActive(uint256 _index) public override view returns (bool) {\\n        return (active[_index]);\\n    }\\n\\n    function getNonce(uint256 _index)\\n        public\\n        override\\n        view\\n        onlyActive(_index)\\n        returns (uint256 currentNonce)\\n    {\\n        return nonce[_index];\\n    }\\n\\n    function deactivate(uint256 _index) internal {\\n        active[_index] = false;\\n        nonce[_index] = 0;\\n    }\\n}\\n\",\"keccak256\":\"0x8f8e29b807e5c55198206a370b4d8751cbd98a663e3f89faff274e2f9d7cae75\",\"license\":\"Apache-2.0\"},\"contracts/MMInterface.sol\":{\"content\":\"// Copyright (C) 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: GPL-3.0-only\\n// This program is free software: you can redistribute it and/or modify it under\\n// the terms of the GNU General Public License as published by the Free Software\\n// Foundation, either version 3 of the License, or (at your option) any later\\n// version.\\n\\n// This program is distributed in the hope that it will be useful, but WITHOUT ANY\\n// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\\n// PARTICULAR PURPOSE. See the GNU General Public License for more details.\\n\\n// You should have received a copy of the GNU General Public License\\n// along with this program.  If not, see <https://www.gnu.org/licenses/>.\\n\\n// Note: This component currently has dependencies that are licensed under the GNU\\n// GPL, version 3, and so you should treat this component as a whole as being under\\n// the GPL version 3. But all Cartesi-written code in this component is licensed\\n// under the Apache License, version 2, or a compatible permissive license, and can\\n// be used independently under the Apache v2 license. After this component is\\n// rewritten, the entire component will be released under the Apache v2 license.\\n\\n/// @title Interface for memory manager instantiator\\npragma solidity ^0.7.0;\\n\\nimport \\\"@cartesi/util/contracts/Instantiator.sol\\\";\\n\\ninterface MMInterface is Instantiator {\\n    enum state {WaitingProofs, WaitingReplay, FinishedReplay}\\n\\n    function getCurrentState(uint256 _index) external view returns (bytes32);\\n\\n    function instantiate(\\n        address _owner,\\n        address _provider,\\n        bytes32 _initialHash\\n    ) external returns (uint256);\\n\\n    function newHash(uint256 _index) external view returns (bytes32);\\n\\n    function finishProofPhase(uint256 _index) external;\\n\\n    function finishReplayPhase(uint256 _index) external;\\n\\n    function getRWArrays(\\n        uint256 _index\\n    )\\n    external\\n    view\\n    returns (\\n        uint64[] memory,\\n        bytes8[] memory,\\n        bool[] memory\\n    );\\n\\n    function stateIsWaitingProofs(uint256 _index) external view returns (bool);\\n\\n    function stateIsWaitingReplay(uint256 _index) external view returns (bool);\\n\\n    function stateIsFinishedReplay(uint256 _index) external view returns (bool);\\n\\n    function getCurrentStateDeadline(\\n        uint256 _index,\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine\\n    ) external view returns (uint256);\\n\\n    function getMaxInstanceDuration(\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine\\n    ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xc35a3addeda42b399d8995c1d3e8ea16746d1d95bb5214cd9709201bc9d702c0\",\"license\":\"GPL-3.0-only\"},\"contracts/MachineInterface.sol\":{\"content\":\"// Copyright (C) 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: GPL-3.0-only\\n// This program is free software: you can redistribute it and/or modify it under\\n// the terms of the GNU General Public License as published by the Free Software\\n// Foundation, either version 3 of the License, or (at your option) any later\\n// version.\\n\\n// This program is distributed in the hope that it will be useful, but WITHOUT ANY\\n// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\\n// PARTICULAR PURPOSE. See the GNU General Public License for more details.\\n\\n// You should have received a copy of the GNU General Public License\\n// along with this program.  If not, see <https://www.gnu.org/licenses/>.\\n\\n// Note: This component currently has dependencies that are licensed under the GNU\\n// GPL, version 3, and so you should treat this component as a whole as being under\\n// the GPL version 3. But all Cartesi-written code in this component is licensed\\n// under the Apache License, version 2, or a compatible permissive license, and can\\n// be used independently under the Apache v2 license. After this component is\\n// rewritten, the entire component will be released under the Apache v2 license.\\n\\n\\n/// @title MachineInterface interface contract\\npragma solidity ^0.7.0;\\n\\n\\ninterface MachineInterface {\\n    event StepGiven(uint8 exitCode);\\n\\n    function step(\\n        uint64[] memory _rwPositions,\\n        bytes8[] memory _rwValues,\\n        bool[] memory _isRead\\n    ) external returns (uint8, uint256);\\n\\n    function getMemoryInteractor() external view returns (address);\\n}\\n\",\"keccak256\":\"0x227a51ac54bc8246aec29d73bc48701c6c2bcd0ad0b606105c079f31283526d7\",\"license\":\"GPL-3.0-only\"},\"contracts/PartitionInterface.sol\":{\"content\":\"// Copyright (C) 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: GPL-3.0-only\\n// This program is free software: you can redistribute it and/or modify it under\\n// the terms of the GNU General Public License as published by the Free Software\\n// Foundation, either version 3 of the License, or (at your option) any later\\n// version.\\n\\n// This program is distributed in the hope that it will be useful, but WITHOUT ANY\\n// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\\n// PARTICULAR PURPOSE. See the GNU General Public License for more details.\\n\\n// You should have received a copy of the GNU General Public License\\n// along with this program.  If not, see <https://www.gnu.org/licenses/>.\\n\\n// Note: This component currently has dependencies that are licensed under the GNU\\n// GPL, version 3, and so you should treat this component as a whole as being under\\n// the GPL version 3. But all Cartesi-written code in this component is licensed\\n// under the Apache License, version 2, or a compatible permissive license, and can\\n// be used independently under the Apache v2 license. After this component is\\n// rewritten, the entire component will be released under the Apache v2 license.\\n\\n/// @title Abstract interface for partition instantiator\\npragma solidity ^0.7.0;\\n\\nimport \\\"@cartesi/util/contracts/Instantiator.sol\\\";\\n\\ninterface PartitionInterface is Instantiator {\\n    enum state {\\n        WaitingQuery,\\n        WaitingHashes,\\n        ChallengerWon,\\n        ClaimerWon,\\n        DivergenceFound\\n    }\\n\\n    function getCurrentState(uint256 _index) external view returns (bytes32);\\n\\n    function instantiate(\\n        address _challenger,\\n        address _claimer,\\n        bytes32 _initialHash,\\n        bytes32 _claimerFinalHash,\\n        uint256 _finalTime,\\n        uint256 _querySize,\\n        uint256 _roundDuration\\n    ) external returns (uint256);\\n\\n    function timeHash(uint256 _index, uint256 key)\\n        external\\n        view\\n        returns (bytes32);\\n\\n    function divergenceTime(uint256 _index) external view returns (uint256);\\n\\n    function stateIsWaitingQuery(uint256 _index) external view returns (bool);\\n\\n    function stateIsWaitingHashes(uint256 _index) external view returns (bool);\\n\\n    function stateIsChallengerWon(uint256 _index) external view returns (bool);\\n\\n    function stateIsClaimerWon(uint256 _index) external view returns (bool);\\n\\n    function stateIsDivergenceFound(uint256 _index)\\n        external\\n        view\\n        returns (bool);\\n\\n    function getPartitionGameIndex(uint256 _index)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getQuerySize(uint256 _index) external view returns (uint256);\\n\\n    function getCurrentStateDeadline(uint _index) external view returns (uint time);\\n\\n    function getMaxInstanceDuration(\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine,\\n        uint256 _partitionSize,\\n        uint256 _maxCycle,\\n        uint256 _picoSecondsToRunInsn\\n    ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xc8c1bf7c3ecd4b7a14be8bf70c93aad06873180056a63af9aca10a7f0e267bf8\",\"license\":\"GPL-3.0-only\"},\"contracts/VGInstantiator.sol\":{\"content\":\"// Copyright (C) 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: GPL-3.0-only\\n// This program is free software: you can redistribute it and/or modify it under\\n// the terms of the GNU General Public License as published by the Free Software\\n// Foundation, either version 3 of the License, or (at your option) any later\\n// version.\\n\\n// This program is distributed in the hope that it will be useful, but WITHOUT ANY\\n// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\\n// PARTICULAR PURPOSE. See the GNU General Public License for more details.\\n\\n// You should have received a copy of the GNU General Public License\\n// along with this program.  If not, see <https://www.gnu.org/licenses/>.\\n\\n// Note: This component currently has dependencies that are licensed under the GNU\\n// GPL, version 3, and so you should treat this component as a whole as being under\\n// the GPL version 3. But all Cartesi-written code in this component is licensed\\n// under the Apache License, version 2, or a compatible permissive license, and can\\n// be used independently under the Apache v2 license. After this component is\\n// rewritten, the entire component will be released under the Apache v2 license.\\n\\n\\n// @title Verification game instantiator\\npragma solidity ^0.7.0;\\n\\nimport \\\"@cartesi/util/contracts/Decorated.sol\\\";\\nimport \\\"@cartesi/util/contracts/InstantiatorImpl.sol\\\";\\nimport \\\"./VGInterface.sol\\\";\\nimport \\\"./PartitionInterface.sol\\\";\\nimport \\\"./MMInterface.sol\\\";\\nimport \\\"./MachineInterface.sol\\\";\\n\\n\\ncontract VGInstantiator is InstantiatorImpl, Decorated, VGInterface {\\n    //  using SafeMath for uint;\\n\\n    PartitionInterface private partition;\\n    MMInterface private mm;\\n\\n    struct VGCtx {\\n        address challenger; // the two parties involved in each instance\\n        address claimer;\\n        uint roundDuration; // time interval to interact with this contract\\n        MachineInterface machine; // the machine which will run the challenge\\n        bytes32 initialHash; // hash of machine memory that both aggree uppon\\n        bytes32 claimerFinalHash; // hash claimer commited for machine after running\\n        uint finalTime; // the time for which the machine should run\\n        uint timeOfLastMove; // last time someone made a move with deadline\\n        uint256 mmInstance; // the instance of the memory that was given to this game\\n        uint256 partitionInstance; // the partition instance given to this game\\n        uint divergenceTime; // the time in which the divergence happened\\n        bytes32 hashBeforeDivergence; // hash aggreed right before divergence\\n        bytes32 hashAfterDivergence; // hash in conflict right after divergence\\n        state currentState;\\n    }\\n\\n    mapping(uint256 => VGCtx) private instance;\\n\\n    // These are the possible states and transitions of the contract.\\n    //\\n    //               +---+\\n    //               |   |\\n    //               +---+\\n    //                 |\\n    //                 | instantiate\\n    //                 v\\n    //               +----------------+  winByPartitionTimeout\\n    //   +-----------| WaitPartition  |------------------------+\\n    //   |           +----------------+                        |\\n    //   |                         |                           |\\n    //   | winByPartitionTimeout   | startMachineRunChallenge  |\\n    //   |                         v                           |\\n    //   |           +-----------------------+                 |\\n    //   | +---------| WaitMemoryProveValues |---------------+ |\\n    //   | |         +-----------------------+               | |\\n    //   | |                                                 | |\\n    //   | |claimVictoryByDeadline   settleVerificationGame  | |\\n    //   v v                                                 v v\\n    // +--------------------+               +-----------------------+\\n    // | FinishedClaimerWon |               | FinishedChallengerWon |\\n    // +--------------------+               +-----------------------+\\n    //\\n\\n    event VGCreated(\\n        uint256 _index,\\n        address _challenger,\\n        address _claimer,\\n        uint _roundDuration,\\n        address _machineAddress,\\n        bytes32 _initialHash,\\n        bytes32 _claimerFinalHash,\\n        uint _finalTime,\\n        uint256 _partitionInstance\\n    );\\n    event PartitionDivergenceFound(uint256 _index, uint256 _mmInstance);\\n    event MemoryWriten(uint256 _index);\\n    event VGFinished(state _finalState);\\n\\n    constructor(address _partitionInstantiatorAddress,\\n                address _mmInstantiatorAddress) {\\n        partition = PartitionInterface(_partitionInstantiatorAddress);\\n        mm = MMInterface(_mmInstantiatorAddress);\\n    }\\n\\n    /// @notice Instantiate a vg instance.\\n    /// @param _challenger address of the challenger.\\n    /// @param _claimer address of the claimer.\\n    /// @param _roundDuration duration of the round (security param)\\n    /// @param _machineAddress address of the machine that will run the instruction\\n    /// @param _initialHash hash in which both claimer and challenger agree on\\n    /// @param _claimerFinalHash final hash claimed by claimer\\n    /// @param _finalTime max cycle of the machine for that computation\\n    /// @return VG index.\\n    function instantiate(\\n        address _challenger,\\n        address _claimer,\\n        uint _roundDuration,\\n        address _machineAddress,\\n        bytes32 _initialHash,\\n        bytes32 _claimerFinalHash,\\n        uint _finalTime) public override returns (uint256)\\n    {\\n        require(_finalTime > 0, \\\"Final time must be greater than zero\\\");\\n        instance[currentIndex].challenger = _challenger;\\n        instance[currentIndex].claimer = _claimer;\\n        instance[currentIndex].roundDuration = _roundDuration * log2OverTwo(_finalTime) + 4;\\n        instance[currentIndex].machine = MachineInterface(_machineAddress);\\n        instance[currentIndex].initialHash = _initialHash;\\n        instance[currentIndex].claimerFinalHash = _claimerFinalHash;\\n        instance[currentIndex].finalTime = _finalTime;\\n        instance[currentIndex].timeOfLastMove = block.timestamp;\\n        instance[currentIndex].partitionInstance = partition.instantiate(\\n            _challenger,\\n            _claimer,\\n            _initialHash,\\n            _claimerFinalHash,\\n            _finalTime,\\n            10,\\n            _roundDuration\\n        );\\n        instance[currentIndex].currentState = state.WaitPartition;\\n        emit VGCreated(\\n            currentIndex,\\n            _challenger,\\n            _claimer,\\n            _roundDuration * log2OverTwo(_finalTime) + 4,\\n            _machineAddress,\\n            _initialHash,\\n            _claimerFinalHash,\\n            _finalTime,\\n            instance[currentIndex].partitionInstance\\n        );\\n\\n        active[currentIndex] = true;\\n        return(currentIndex++);\\n    }\\n\\n    /// @notice In case one of the parties wins the partition challenge by\\n    /// timeout, then he or she can call this function to claim victory in\\n    /// the hireCPU contract as well.\\n\\n    // TO-DO: should this stop existing? We can make claimVictory by timeout generic\\n    function winByPartitionTimeout(uint256 _index) public override\\n        onlyInstantiated(_index)\\n    {\\n        require(instance[_index].currentState == state.WaitPartition, \\\"State should be WaitPartition\\\");\\n        uint256 partitionIndex = instance[_index].partitionInstance;\\n        if (partition.stateIsChallengerWon(partitionIndex)) {\\n            challengerWins(_index);\\n            return;\\n        }\\n        if (partition.stateIsClaimerWon(partitionIndex)) {\\n            claimerWins(_index);\\n            return;\\n        }\\n        revert(\\\"Fail to WinByPartitionTimeout in current condition\\\");\\n    }\\n\\n    /// @notice After the partition challenge has lead to a divergence in the hash\\n    /// within one time step, anyone can start a mechine run challenge to decide\\n    /// whether the claimer was correct about that particular step transition.\\n    /// This function call solely instantiate a memory manager, so the\\n    /// provider must fill the appropriate addresses that will be read by the\\n    /// machine.\\n    function startMachineRunChallenge(uint256 _index) public override\\n        onlyInstantiated(_index)\\n        increasesNonce(_index)\\n    {\\n        require(instance[_index].currentState == state.WaitPartition, \\\"State should be WaitPartition\\\");\\n        require(partition.stateIsDivergenceFound(instance[_index].partitionInstance), \\\"Divergence should be found\\\");\\n        uint256 partitionIndex = instance[_index].partitionInstance;\\n        uint divergenceTime = partition.divergenceTime(partitionIndex);\\n        instance[_index].divergenceTime = divergenceTime;\\n        instance[_index].hashBeforeDivergence = partition.timeHash(partitionIndex, divergenceTime);\\n        instance[_index].hashAfterDivergence = partition.timeHash(partitionIndex, divergenceTime + 1);\\n        instance[_index].mmInstance = mm.instantiate(\\n            address(this),\\n            instance[_index].challenger,\\n            instance[_index].hashBeforeDivergence\\n        );\\n        // !!!!!!!!! should call clear in partitionInstance !!!!!!!!!\\n        delete instance[_index].partitionInstance;\\n        instance[_index].timeOfLastMove = block.timestamp;\\n        instance[_index].currentState = state.WaitMemoryProveValues;\\n        emit PartitionDivergenceFound(_index, instance[_index].mmInstance);\\n    }\\n\\n    /// @notice After having filled the memory manager with the necessary data,\\n    /// the provider calls this function to instantiate the machine and perform\\n    /// one step on it. The machine will write to memory now. Later, the\\n    /// provider will be expected to update the memory hash accordingly.\\n    function settleVerificationGame(uint256 _index) public override\\n        onlyInstantiated(_index)\\n        onlyBy(instance[_index].challenger)\\n    {\\n        require(instance[_index].currentState == state.WaitMemoryProveValues, \\\"State should be WaitMemoryProveValues\\\");\\n        uint256 mmIndex = instance[_index].mmInstance;\\n        require(mm.stateIsWaitingReplay(mmIndex), \\\"State of MM should be WaitingReplay\\\");\\n\\n        (\\n            uint64[] memory positions,\\n            bytes8[] memory values,\\n            bool[] memory wasRead\\n        ) = mm.getRWArrays(mmIndex);\\n\\n        (uint8 exitCode, uint256 memoryAccesses) = instance[_index].machine.step(positions, values, wasRead);\\n\\n        mm.finishReplayPhase(mmIndex);\\n\\n        require(mm.stateIsFinishedReplay(mmIndex), \\\"State of MM should be FinishedReplay\\\");\\n        \\n        if( exitCode == 0 && // Step exits correctly\\n            memoryAccesses == positions.length && // Number of memory acceses matches\\n            mm.newHash(mmIndex) != instance[_index].hashAfterDivergence // proves challenger newHash diverge from claimer\\n        ) {\\n            challengerWins(_index);\\n        }\\n        claimerWins(_index);\\n    }\\n\\n    /// @notice Claimer can claim victory if challenger has lost the deadline\\n    /// for some of the steps in the protocol.\\n    function claimVictoryByTime(uint256 _index) public override\\n        onlyInstantiated(_index)\\n        onlyBy(instance[_index].claimer)\\n    {\\n        // TO-DO: should we add onlyAfter as a function in solidity-utils lib?\\n        // This should be the onlyAfter modifier, but it cannot use functions:\\n        // DeclarationError: Function type can not be used in this context.\\n        // TO-DO: change the hardcode numbers\\n        require(\\n            block.timestamp > instance[_index].timeOfLastMove + getMaxStateDuration(\\n                instance[_index].currentState,\\n                instance[_index].roundDuration,\\n                40, // time to start machine\\n                partition.getQuerySize(instance[_index].partitionInstance),\\n                instance[_index].finalTime, //maxCycle\\n                500 // pico seconds to run insn\\n        ), \\\"Duration of WaitMemoryProveValues must be over\\\");\\n\\n        require(instance[_index].currentState == state.WaitMemoryProveValues, \\\"State should be WaitMemoryProveValues\\\");\\n        claimerWins(_index);\\n    }\\n\\n    // state getters\\n    function getCurrentStateDeadline(uint _index) public view\\n        onlyInstantiated(_index)\\n        returns (uint time)\\n    {\\n        VGCtx memory i = instance[_index];\\n        time = i.timeOfLastMove + getMaxStateDuration(\\n            _index,\\n            i.roundDuration,\\n            40 // time to start machine @DEV I want to use preprocessor constant for this, like:\\n            // #def TIMETOSTARTMACHINE 40\\n        );\\n    }\\n\\n    function getState(uint256 _index, address) public view\\n        onlyInstantiated(_index)\\n        returns ( address _challenger,\\n                address _claimer,\\n                MachineInterface _machine,\\n                bytes32 _initialHash,\\n                bytes32 _claimerFinalHash,\\n                bytes32 _hashBeforeDivergence,\\n                bytes32 _hashAfterDivergence,\\n                bytes32 _currentState,\\n                uint[] memory _uintValues)\\n    {\\n        VGCtx memory i = instance[_index];\\n\\n        uint[] memory uintValues = new uint[](5);\\n        uintValues[0] = i.finalTime;\\n        uintValues[1] = i.timeOfLastMove + getMaxStateDuration(\\n                i.currentState,\\n                i.roundDuration,\\n                40, // time to start machine\\n                partition.getQuerySize(i.partitionInstance),\\n                i.finalTime, //maxCycle\\n                500 // pico seconds to run insn\\n            ); //deadline\\n        uintValues[2] = i.mmInstance;\\n        uintValues[3] = i.partitionInstance;\\n        uintValues[4] = i.divergenceTime;\\n\\n        // we have to duplicate the code for getCurrentState because of\\n        // \\\"stack too deep\\\"\\n        bytes32 currentState;\\n        if (i.currentState == state.WaitPartition) {\\n            currentState = \\\"WaitPartition\\\";\\n        }\\n        if (i.currentState == state.WaitMemoryProveValues) {\\n            currentState = \\\"WaitMemoryProveValues\\\";\\n        }\\n        if (i.currentState == state.FinishedClaimerWon) {\\n            currentState = \\\"FinishedClaimerWon\\\";\\n        }\\n        if (i.currentState == state.FinishedChallengerWon) {\\n            currentState = \\\"FinishedChallengerWon\\\";\\n        }\\n\\n        return (\\n            i.challenger,\\n            i.claimer,\\n            i.machine,\\n            i.initialHash,\\n            i.claimerFinalHash,\\n            i.hashBeforeDivergence,\\n            i.hashAfterDivergence,\\n            currentState,\\n            uintValues\\n        );\\n    }\\n\\n    function isConcerned(uint256 _index, address _user) public override view returns (bool) {\\n        return ((instance[_index].challenger == _user) || (instance[_index].claimer == _user));\\n    }\\n\\n    function getMaxStateDuration(\\n        uint256 _index,\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine\\n        ) private view returns (uint256)\\n    {\\n        VGCtx memory i = instance[_index];\\n        // TODO: the 1 should probably be roundDuration\\n        if (instance[_index].currentState == state.WaitPartition) {\\n            return partition.getCurrentStateDeadline(i.partitionInstance) - i.timeOfLastMove;\\n        }\\n        if (instance[_index].currentState == state.WaitMemoryProveValues) {\\n            return mm.getCurrentStateDeadline(i.mmInstance, _roundDuration, _timeToStartMachine);\\n        }\\n\\n        if (instance[_index].currentState == state.FinishedClaimerWon ||\\n            instance[_index].currentState == state.FinishedChallengerWon) {\\n            return 0; // final state\\n        }\\n        require(false, \\\"Unrecognized state\\\");\\n    }\\n\\n    /// @notice Get the worst case scenario duration for a specific state\\n    /// @param _roundDuration security parameter, the max time an agent\\n    //          has to react and submit one simple transaction\\n    /// @param _timeToStartMachine time to build the machine for the first time\\n    /// @param _partitionSize size of partition, how many instructions the\\n    //          will run to reach the necessary hash\\n    /// @param _maxCycle is the maximum amount of steps a machine can perform\\n    //          before being forced into becoming halted\\n    //  @DEV I want to delete this..can we change the getMaxInstanceDuration interface safely??\\n    function getMaxStateDuration(\\n        state _state,\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine,\\n        uint256 _partitionSize,\\n        uint256 _maxCycle,\\n        uint256 _picoSecondsToRunInsn\\n    ) private view returns (uint256)\\n    {\\n        // TODO: the 1 should probably be roundDuration\\n        if (_state == state.WaitPartition) {\\n            return partition.getMaxInstanceDuration(_roundDuration, _timeToStartMachine, _partitionSize, _maxCycle, _picoSecondsToRunInsn);\\n        }\\n        if (_state == state.WaitMemoryProveValues) {\\n            return mm.getMaxInstanceDuration(_roundDuration, _timeToStartMachine);\\n        }\\n\\n        if (_state == state.FinishedClaimerWon || _state == state.FinishedChallengerWon) {\\n            return 0; // final state\\n        }\\n        require(false, \\\"Unrecognized state\\\");\\n    }\\n\\n    /// @notice Get the worst case scenario duration for a specific state\\n    /// @param _roundDuration security parameter, the max time an agent\\n    //          has to react and submit one simple transaction\\n    /// @param _maxCycle is the maximum amount of steps a machine can perform\\n    //          before being forced into becoming halted\\n    function getMaxInstanceDuration(\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine,\\n        uint256 _partitionSize,\\n        uint256 _maxCycle,\\n        uint256 _picoSecondsToRunInsn) public override view returns (uint256)\\n    {\\n        uint256 waitPartitionDuration = getMaxStateDuration(\\n            state.WaitPartition,\\n            _roundDuration,\\n            _timeToStartMachine,\\n            _partitionSize,\\n            _maxCycle,\\n            _picoSecondsToRunInsn\\n        );\\n\\n        uint256 waitMemoryProveValues = getMaxStateDuration(\\n            state.WaitMemoryProveValues,\\n            _roundDuration,\\n            _timeToStartMachine,\\n            _partitionSize,\\n            _maxCycle,\\n            _picoSecondsToRunInsn\\n        );\\n\\n        return waitPartitionDuration + waitMemoryProveValues;\\n    }\\n\\n    function getSubInstances(uint256 _index, address)\\n        public override view returns (address[] memory _addresses,\\n                            uint256[] memory _indices)\\n    {\\n        address[] memory a;\\n        uint256[] memory i;\\n        if (instance[_index].currentState == state.WaitPartition) {\\n            a = new address[](1);\\n            i = new uint256[](1);\\n            a[0] = address(partition);\\n            i[0] = instance[_index].partitionInstance;\\n            return (a, i);\\n        }\\n        if (instance[_index].currentState == state.WaitMemoryProveValues) {\\n            a = new address[](1);\\n            i = new uint256[](1);\\n            a[0] = address(mm);\\n            i[0] = instance[_index].mmInstance;\\n            return (a, i);\\n        }\\n        a = new address[](0);\\n        i = new uint256[](0);\\n        return (a, i);\\n    }\\n\\n    function getCurrentState(uint256 _index) public override view\\n        onlyInstantiated(_index)\\n        returns (bytes32)\\n    {\\n        if (instance[_index].currentState == state.WaitPartition) {\\n            return \\\"WaitPartition\\\";\\n        }\\n        if (instance[_index].currentState == state.WaitMemoryProveValues) {\\n            return \\\"WaitMemoryProveValues\\\";\\n        }\\n        if (instance[_index].currentState == state.FinishedClaimerWon) {\\n            return \\\"FinishedClaimerWon\\\";\\n        }\\n        if (instance[_index].currentState == state.FinishedChallengerWon) {\\n            return \\\"FinishedChallengerWon\\\";\\n        }\\n        require(false, \\\"Unrecognized state\\\");\\n    }\\n\\n    // remove these functions and change tests accordingly\\n    /* function stateIsWaitPartition(uint256 _index) public view */\\n    /*   onlyInstantiated(_index) */\\n    /*   returns (bool) */\\n    /* { return instance[_index].currentState == state.WaitPartition; } */\\n\\n    /* function stateIsWaitMemoryProveValues(uint256 _index) public view */\\n    /*   onlyInstantiated(_index) */\\n    /*   returns (bool) */\\n    /* { return instance[_index].currentState == state.WaitMemoryProveValues; } */\\n\\n    function stateIsFinishedClaimerWon(uint256 _index) public override view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    { return instance[_index].currentState == state.FinishedClaimerWon; }\\n\\n    function stateIsFinishedChallengerWon(uint256 _index) public override view\\n        onlyInstantiated(_index)\\n        returns (bool)\\n    { return instance[_index].currentState == state.FinishedChallengerWon; }\\n\\n    function clearInstance(uint256 _index) internal\\n        onlyInstantiated(_index)\\n    {\\n        delete instance[_index].challenger;\\n        delete instance[_index].claimer;\\n        delete instance[_index].roundDuration;\\n        delete instance[_index].machine;\\n        delete instance[_index].initialHash;\\n        delete instance[_index].claimerFinalHash;\\n        delete instance[_index].finalTime;\\n        delete instance[_index].timeOfLastMove;\\n        // !!!!!!!!! should call clear in mmInstance !!!!!!!!!\\n        delete instance[_index].mmInstance;\\n        delete instance[_index].divergenceTime;\\n        delete instance[_index].hashBeforeDivergence;\\n        delete instance[_index].hashAfterDivergence;\\n        deactivate(_index);\\n    }\\n\\n    function challengerWins(uint256 _index) private\\n        onlyInstantiated(_index)\\n    {\\n        clearInstance(_index);\\n        instance[_index].currentState = state.FinishedChallengerWon;\\n        emit VGFinished(instance[_index].currentState);\\n    }\\n\\n    function claimerWins(uint256 _index) private\\n        onlyInstantiated(_index)\\n    {\\n        clearInstance(_index);\\n        instance[_index].currentState = state.FinishedClaimerWon;\\n        emit VGFinished(instance[_index].currentState);\\n    }\\n\\n    function getPartitionQuerySize(uint256 _index) public override view returns (uint256) {\\n        return partition.getQuerySize(instance[_index].partitionInstance);\\n    }\\n\\n    function getPartitionGameIndex(uint256 _index) public override view returns (uint256) {\\n        return partition.getPartitionGameIndex(instance[_index].partitionInstance);\\n    }\\n\\n    //TODO: It is supposed to be log10 * C, because we're using a partition of 10\\n    function log2OverTwo(uint x) public pure returns (uint y){\\n        uint leading = 256;\\n\\n        while (x != 0) {\\n            x = x >> 1;\\n            leading--;\\n        }\\n        // plus one to do an approx ceiling\\n        return (255 - leading) / 2;\\n    }\\n}\\n\",\"keccak256\":\"0x6e450cb8d02d68b0531eac5738a5ba0dd83c73832a1b36592bffb77e1cc24a8e\",\"license\":\"GPL-3.0-only\"},\"contracts/VGInterface.sol\":{\"content\":\"// Copyright (C) 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: GPL-3.0-only\\n// This program is free software: you can redistribute it and/or modify it under\\n// the terms of the GNU General Public License as published by the Free Software\\n// Foundation, either version 3 of the License, or (at your option) any later\\n// version.\\n\\n// This program is distributed in the hope that it will be useful, but WITHOUT ANY\\n// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\\n// PARTICULAR PURPOSE. See the GNU General Public License for more details.\\n\\n// You should have received a copy of the GNU General Public License\\n// along with this program.  If not, see <https://www.gnu.org/licenses/>.\\n\\n// Note: This component currently has dependencies that are licensed under the GNU\\n// GPL, version 3, and so you should treat this component as a whole as being under\\n// the GPL version 3. But all Cartesi-written code in this component is licensed\\n// under the Apache License, version 2, or a compatible permissive license, and can\\n// be used independently under the Apache v2 license. After this component is\\n// rewritten, the entire component will be released under the Apache v2 license.\\n\\n// @title Verification game instantiator\\npragma solidity ^0.7.0;\\n\\nimport \\\"@cartesi/util/contracts/Decorated.sol\\\";\\nimport \\\"@cartesi/util/contracts/Instantiator.sol\\\";\\nimport \\\"./PartitionInterface.sol\\\";\\nimport \\\"./MMInterface.sol\\\";\\nimport \\\"./MachineInterface.sol\\\";\\n\\ninterface VGInterface is Instantiator {\\n    enum state {\\n        WaitPartition,\\n        WaitMemoryProveValues,\\n        FinishedClaimerWon,\\n        FinishedChallengerWon\\n    }\\n\\n    function instantiate(\\n        address _challenger,\\n        address _claimer,\\n        uint256 _roundDuration,\\n        address _machineAddress,\\n        bytes32 _initialHash,\\n        bytes32 _claimerFinalHash,\\n        uint256 _finalTime\\n    ) external returns (uint256);\\n\\n    function getCurrentState(uint256 _index) external view returns (bytes32);\\n\\n    function stateIsFinishedClaimerWon(uint256 _index)\\n        external\\n        view\\n        returns (bool);\\n\\n    function stateIsFinishedChallengerWon(uint256 _index)\\n        external\\n        view\\n        returns (bool);\\n\\n    function winByPartitionTimeout(uint256 _index) external;\\n\\n    function startMachineRunChallenge(uint256 _index) external;\\n\\n    function settleVerificationGame(uint256 _index) external;\\n\\n    function claimVictoryByTime(uint256 _index) external;\\n\\n    //function stateIsWaitPartition(uint256 _index) public view returns (bool);\\n    //function stateIsWaitMemoryProveValues(uint256 _index) public view\\n    //  returns (bool);\\n    //function clearInstance(uint256 _index) internal;\\n    //function challengerWins(uint256 _index) private;\\n    //function claimerWins(uint256 _index) private;\\n\\n    function getPartitionQuerySize(uint256 _index)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getPartitionGameIndex(uint256 _index)\\n        external\\n        view\\n        returns (uint256);\\n\\n    function getMaxInstanceDuration(\\n        uint256 _roundDuration,\\n        uint256 _timeToStartMachine,\\n        uint256 _partitionSize,\\n        uint256 _maxCycle,\\n        uint256 _picoSecondsToRunInsn\\n    ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x520380137623cac076f23ab845ed9f6611f56065cab174455fcf9815c81d5ba6\",\"license\":\"GPL-3.0-only\"}},\"version\":1}",
  "storageLayout": {
    "storage": [
      {
        "astId": 89,
        "contract": "contracts/VGInstantiator.sol:VGInstantiator",
        "label": "currentIndex",
        "offset": 0,
        "slot": "0",
        "type": "t_uint256"
      },
      {
        "astId": 93,
        "contract": "contracts/VGInstantiator.sol:VGInstantiator",
        "label": "active",
        "offset": 0,
        "slot": "1",
        "type": "t_mapping(t_uint256,t_bool)"
      },
      {
        "astId": 97,
        "contract": "contracts/VGInstantiator.sol:VGInstantiator",
        "label": "nonce",
        "offset": 0,
        "slot": "2",
        "type": "t_mapping(t_uint256,t_uint256)"
      },
      {
        "astId": 4841,
        "contract": "contracts/VGInstantiator.sol:VGInstantiator",
        "label": "partition",
        "offset": 0,
        "slot": "3",
        "type": "t_contract(PartitionInterface)4825"
      },
      {
        "astId": 4843,
        "contract": "contracts/VGInstantiator.sol:VGInstantiator",
        "label": "mm",
        "offset": 0,
        "slot": "4",
        "type": "t_contract(MMInterface)2964"
      },
      {
        "astId": 4876,
        "contract": "contracts/VGInstantiator.sol:VGInstantiator",
        "label": "instance",
        "offset": 0,
        "slot": "5",
        "type": "t_mapping(t_uint256,t_struct(VGCtx)4872_storage)"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_bool": {
        "encoding": "inplace",
        "label": "bool",
        "numberOfBytes": "1"
      },
      "t_bytes32": {
        "encoding": "inplace",
        "label": "bytes32",
        "numberOfBytes": "32"
      },
      "t_contract(MMInterface)2964": {
        "encoding": "inplace",
        "label": "contract MMInterface",
        "numberOfBytes": "20"
      },
      "t_contract(MachineInterface)2992": {
        "encoding": "inplace",
        "label": "contract MachineInterface",
        "numberOfBytes": "20"
      },
      "t_contract(PartitionInterface)4825": {
        "encoding": "inplace",
        "label": "contract PartitionInterface",
        "numberOfBytes": "20"
      },
      "t_enum(state)6320": {
        "encoding": "inplace",
        "label": "enum VGInterface.state",
        "numberOfBytes": "1"
      },
      "t_mapping(t_uint256,t_bool)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => bool)",
        "numberOfBytes": "32",
        "value": "t_bool"
      },
      "t_mapping(t_uint256,t_struct(VGCtx)4872_storage)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => struct VGInstantiator.VGCtx)",
        "numberOfBytes": "32",
        "value": "t_struct(VGCtx)4872_storage"
      },
      "t_mapping(t_uint256,t_uint256)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => uint256)",
        "numberOfBytes": "32",
        "value": "t_uint256"
      },
      "t_struct(VGCtx)4872_storage": {
        "encoding": "inplace",
        "label": "struct VGInstantiator.VGCtx",
        "members": [
          {
            "astId": 4845,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "challenger",
            "offset": 0,
            "slot": "0",
            "type": "t_address"
          },
          {
            "astId": 4847,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "claimer",
            "offset": 0,
            "slot": "1",
            "type": "t_address"
          },
          {
            "astId": 4849,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "roundDuration",
            "offset": 0,
            "slot": "2",
            "type": "t_uint256"
          },
          {
            "astId": 4851,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "machine",
            "offset": 0,
            "slot": "3",
            "type": "t_contract(MachineInterface)2992"
          },
          {
            "astId": 4853,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "initialHash",
            "offset": 0,
            "slot": "4",
            "type": "t_bytes32"
          },
          {
            "astId": 4855,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "claimerFinalHash",
            "offset": 0,
            "slot": "5",
            "type": "t_bytes32"
          },
          {
            "astId": 4857,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "finalTime",
            "offset": 0,
            "slot": "6",
            "type": "t_uint256"
          },
          {
            "astId": 4859,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "timeOfLastMove",
            "offset": 0,
            "slot": "7",
            "type": "t_uint256"
          },
          {
            "astId": 4861,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "mmInstance",
            "offset": 0,
            "slot": "8",
            "type": "t_uint256"
          },
          {
            "astId": 4863,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "partitionInstance",
            "offset": 0,
            "slot": "9",
            "type": "t_uint256"
          },
          {
            "astId": 4865,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "divergenceTime",
            "offset": 0,
            "slot": "10",
            "type": "t_uint256"
          },
          {
            "astId": 4867,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "hashBeforeDivergence",
            "offset": 0,
            "slot": "11",
            "type": "t_bytes32"
          },
          {
            "astId": 4869,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "hashAfterDivergence",
            "offset": 0,
            "slot": "12",
            "type": "t_bytes32"
          },
          {
            "astId": 4871,
            "contract": "contracts/VGInstantiator.sol:VGInstantiator",
            "label": "currentState",
            "offset": 0,
            "slot": "13",
            "type": "t_enum(state)6320"
          }
        ],
        "numberOfBytes": "448"
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      }
    }
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "claimVictoryByTime(uint256)": {
        "notice": "Claimer can claim victory if challenger has lost the deadline for some of the steps in the protocol."
      },
      "instantiate(address,address,uint256,address,bytes32,bytes32,uint256)": {
        "notice": "Instantiate a vg instance."
      },
      "settleVerificationGame(uint256)": {
        "notice": "After having filled the memory manager with the necessary data, the provider calls this function to instantiate the machine and perform one step on it. The machine will write to memory now. Later, the provider will be expected to update the memory hash accordingly."
      },
      "startMachineRunChallenge(uint256)": {
        "notice": "After the partition challenge has lead to a divergence in the hash within one time step, anyone can start a mechine run challenge to decide whether the claimer was correct about that particular step transition. This function call solely instantiate a memory manager, so the provider must fill the appropriate addresses that will be read by the machine."
      },
      "winByPartitionTimeout(uint256)": {
        "notice": "In case one of the parties wins the partition challenge by timeout, then he or she can call this function to claim victory in the hireCPU contract as well."
      }
    },
    "version": 1
  }
}