{"file_path":"TransparentUpgradeableProxy.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize, which returns 0 for contracts in\n        // construction, since the code is only stored at the end of the\n        // constructor execution.\n\n        uint256 size;\n        // solhint-disable-next-line no-inline-assembly\n        assembly { size := extcodesize(account) }\n        return size > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n        (bool success, ) = recipient.call{ value: amount }(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain`call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n      return functionCall(target, data, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        require(isContract(target), \"Address: call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.call{ value: value }(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n        require(isContract(target), \"Address: static call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n        require(isContract(target), \"Address: delegate call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            // Look for revert reason and bubble it up if present\n            if (returndata.length > 0) {\n                // The easiest way to bubble the revert reason is using memory via assembly\n\n                // solhint-disable-next-line no-inline-assembly\n                assembly {\n                    let returndata_size := mload(returndata)\n                    revert(add(32, returndata), returndata_size)\n                }\n            } else {\n                revert(errorMessage);\n            }\n        }\n    }\n}\n\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n    /**\n     * @dev Delegates the current call to `implementation`.\n     *\n     * This function does not return to its internall call site, it will return directly to the external caller.\n     */\n    function _delegate(address implementation) internal virtual {\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            // Copy msg.data. We take full control of memory in this inline assembly\n            // block because it will not return to Solidity code. We overwrite the\n            // Solidity scratch pad at memory position 0.\n            calldatacopy(0, 0, calldatasize())\n\n            // Call the implementation.\n            // out and outsize are 0 because we don't know the size yet.\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            // Copy the returned data.\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            // delegatecall returns 0 on error.\n            case 0 { revert(0, returndatasize()) }\n            default { return(0, returndatasize()) }\n        }\n    }\n\n    /**\n     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n     * and {_fallback} should delegate.\n     */\n    function _implementation() internal view virtual returns (address);\n\n    /**\n     * @dev Delegates the current call to the address returned by `_implementation()`.\n     *\n     * This function does not return to its internall call site, it will return directly to the external caller.\n     */\n    function _fallback() internal virtual {\n        _beforeFallback();\n        _delegate(_implementation());\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n     * function in the contract matches the call data.\n     */\n    fallback () external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n     * is empty.\n     */\n    receive () external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n     * call, or as part of the Solidity `fallback` or `receive` functions.\n     *\n     * If overriden should call `super._beforeFallback()`.\n     */\n    function _beforeFallback() internal virtual {\n    }\n}\n\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n *\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\n * {TransparentUpgradeableProxy}.\n */\ncontract UpgradeableProxy is Proxy {\n    /**\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n     *\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n     * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n     */\n    constructor(address _logic, bytes memory _data) public payable {\n        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n        _setImplementation(_logic);\n        if(_data.length > 0) {\n            Address.functionDelegateCall(_logic, _data);\n        }\n    }\n\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function _implementation() internal view virtual override returns (address impl) {\n        bytes32 slot = _IMPLEMENTATION_SLOT;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            impl := sload(slot)\n        }\n    }\n\n    /**\n     * @dev Upgrades the proxy to a new implementation.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeTo(address newImplementation) internal virtual {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        require(Address.isContract(newImplementation), \"UpgradeableProxy: new implementation is not a contract\");\n\n        bytes32 slot = _IMPLEMENTATION_SLOT;\n\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            sstore(slot, newImplementation)\n        }\n    }\n}\n\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\n    /**\n     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n     * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\n     */\n    constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\n        assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n        _setAdmin(admin_);\n    }\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n     */\n    modifier ifAdmin() {\n        if (msg.sender == _admin()) {\n            _;\n        } else {\n            _fallback();\n        }\n    }\n\n    /**\n     * @dev Returns the current admin.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n     */\n    function admin() external ifAdmin returns (address admin_) {\n        admin_ = _admin();\n    }\n\n    /**\n     * @dev Returns the current implementation.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n     */\n    function implementation() external ifAdmin returns (address implementation_) {\n        implementation_ = _implementation();\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {AdminChanged} event.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n     */\n    function changeAdmin(address newAdmin) external virtual ifAdmin {\n        require(newAdmin != address(0), \"TransparentUpgradeableProxy: new admin is the zero address\");\n        emit AdminChanged(_admin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n     */\n    function upgradeTo(address newImplementation) external virtual ifAdmin {\n        _upgradeTo(newImplementation);\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n     * proxied contract.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n     */\n    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\n        _upgradeTo(newImplementation);\n        Address.functionDelegateCall(newImplementation, data);\n    }\n\n    /**\n     * @dev Returns the current admin.\n     */\n    function _admin() internal view virtual returns (address adm) {\n        bytes32 slot = _ADMIN_SLOT;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            adm := sload(slot)\n        }\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        bytes32 slot = _ADMIN_SLOT;\n\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            sstore(slot, newAdmin)\n        }\n    }\n\n    /**\n     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n     */\n    function _beforeFallback() internal virtual override {\n        require(msg.sender != _admin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n        super._beforeFallback();\n    }\n}\n","deployed_bytecode":"0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f8603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610732602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b56042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105eb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078f6026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b6020831061056c5780518252601f19909201916020918201910161054d565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cc576040519150601f19603f3d011682016040523d82523d6000602084013e6105d1565b606091505b50915091506105e1828286610653565b9695505050505050565b6105f4816103b0565b61062f5760405162461bcd60e51b81526004018080602001828103825260368152602001806107596036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106625750816103a9565b8251156106725782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bc5781810151838201526020016106a4565b50505050905090810190601f1680156106e95780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212206c7d9f9210050a2a3b139e9018b711bee78264b2de59dd83f2d515ee541efbf564736f6c634300060c0033","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"github_repository_metadata":null,"compiler_settings":{"evmVersion":"istanbul","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[]},"optimization_runs":200,"sourcify_repo_url":"https://repo.sourcify.dev/contracts/partial_match/42161/0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8/","decoded_constructor_args":null,"compiler_version":"0.6.12+commit.27d51765","is_verified_via_verifier_alliance":false,"verified_at":"2024-05-26T03:49:50.720125Z","implementations":[{"address_hash":"0x1eFB3f88Bc88f03FD1804A5C53b7141bbEf5dED8","name":"ArbFiatToken"}],"proxy_type":"eip1967","external_libraries":[],"creation_bytecode":"0x608060405234801561001057600080fd5b50613282806100206000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80637ecebe001161011a578063a6f9dae1116100ad578063c2eeeebd1161007c578063c2eeeebd14610946578063d505accf1461094e578063dd62ed3e1461099f578063f9f92be4146109cd578063fe575a87146109f357610206565b8063a6f9dae1146108c6578063a9059cbb146108ec578063ad38bf2214610918578063bd1024301461093e57610206565b80638da5cb5b116100e95780638da5cb5b1461088257806395d89b411461088a5780639fd0506d14610892578063a457c2d71461089a57610206565b80637ecebe00146108045780638456cb591461082a5780638b851b95146108325780638c2a993e1461085657610206565b80632d88af4a1161019d5780633f4ba83a1161016c5780633f4ba83a146106e95780634000aea0146106f15780635c975abb146107aa57806370a08231146107b257806374f4f547146107d857610206565b80632d88af4a14610671578063313ce567146106975780633644e515146106b557806339509351146106bd57610206565b8063189db7d2116101d9578063189db7d2146104125780631a895266146104c6578063238b4bc5146104ec57806323b872dd1461063b57610206565b806306fdde031461020b578063095ea7b3146102885780631624f6c6146102c857806318160ddd146103f8575b600080fd5b610213610a19565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024d578181015183820152602001610235565b50505050905090810190601f16801561027a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102b46004803603604081101561029e57600080fd5b506001600160a01b038135169060200135610aaf565b604080519115158252519081900360200190f35b6103f6600480360360608110156102de57600080fd5b810190602081018135600160201b8111156102f857600080fd5b82018360208201111561030a57600080fd5b803590602001918460018302840111600160201b8311171561032b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561037d57600080fd5b82018360208201111561038f57600080fd5b803590602001918460018302840111600160201b831117156103b057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610bca9050565b005b610400610c8b565b60408051918252519081900360200190f35b6103f66004803603604081101561042857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561045257600080fd5b82018360208201111561046457600080fd5b803590602001918460018302840111600160201b8311171561048557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c91945050505050565b6103f6600480360360208110156104dc57600080fd5b50356001600160a01b0316610ccb565b6103f6600480360360c081101561050257600080fd5b6001600160a01b0382358116926020810135821692604082013590921691810190608081016060820135600160201b81111561053d57600080fd5b82018360208201111561054f57600080fd5b803590602001918460018302840111600160201b8311171561057057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156105c257600080fd5b8201836020820111156105d457600080fd5b803590602001918460018302840111600160201b831117156105f557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610d739050565b6102b46004803603606081101561065157600080fd5b506001600160a01b03813581169160208101359091169060400135610dbf565b6103f66004803603602081101561068757600080fd5b50356001600160a01b0316610f3b565b61069f610fa0565b6040805160ff9092168252519081900360200190f35b610400610fa9565b6102b4600480360360408110156106d357600080fd5b506001600160a01b038135169060200135610fb8565b6103f66110ca565b6102b46004803603606081101561070757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561073657600080fd5b82018360208201111561074857600080fd5b803590602001918460018302840111600160201b8311171561076957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611166945050505050565b6102b4611283565b610400600480360360208110156107c857600080fd5b50356001600160a01b0316611293565b6103f6600480360360408110156107ee57600080fd5b506001600160a01b0381351690602001356112ae565b6104006004803603602081101561081a57600080fd5b50356001600160a01b03166113bd565b6103f66113e4565b61083a611486565b604080516001600160a01b039092168252519081900360200190f35b6103f66004803603604081101561086c57600080fd5b506001600160a01b038135169060200135611495565b61083a61159f565b6102136115ae565b61083a61160f565b6102b4600480360360408110156108b057600080fd5b506001600160a01b03813516906020013561161e565b6103f6600480360360208110156108dc57600080fd5b50356001600160a01b0316611730565b6102b46004803603604081101561090257600080fd5b506001600160a01b038135169060200135611792565b6103f66004803603602081101561092e57600080fd5b50356001600160a01b03166118a4565b61083a611992565b61083a6119a1565b6103f6600480360360e081101561096457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356119b0565b610400600480360360408110156109b557600080fd5b506001600160a01b0381358116916020013516611b2e565b6103f6600480360360208110156109e357600080fd5b50356001600160a01b0316611b59565b6102b460048036036020811015610a0957600080fd5b50356001600160a01b0316611c04565b60368054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610aa55780601f10610a7a57610100808354040283529160200191610aa5565b820191906000526020600020905b815481529060010190602001808311610a8857829003601f168201915b5050505050905090565b60cf54600090600160a01b900460ff1615610b06576040805162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015290519081900360640190fd5b33600081815260d1602052604090205460ff1615610b59576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260d16020526040902054849060ff1615610bb7576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b610bc18585611c22565b95945050505050565b600054610100900460ff1680610be35750610be3611c3f565b80610bf1575060005460ff16155b610c2c5760405162461bcd60e51b815260040180806020018281038252602e815260200180613123602e913960400191505060405180910390fd5b600054610100900460ff16158015610c57576000805460ff1961ff0019909116610100171660011790555b610c6084611c50565b610c6a8484611d27565b610c7382611ddc565b8015610c85576000805461ff00191690555b50505050565b60355490565b6040805162461bcd60e51b815260206004820152600a602482015269444f5f4e4f545f55534560b01b604482015290519081900360640190fd5b60d0546001600160a01b03163314610d2a576040805162461bcd60e51b815260206004820152601d60248201527f63616c6c6572206973206e6f742074686520626c61636b6c6973746572000000604482015290519081900360640190fd5b6001600160a01b038116600081815260d16020526040808220805460ff19169055517f117e3210bb9aa7d9baff172026820255c6f6c30ba8999d1c2fd88e2848137c4e9190a250565b60cc80546001600160a01b038089166001600160a01b03199283161790925560cd805492881692909116919091179055610dac84611df2565b610db7838383610bca565b505050505050565b60cf54600090600160a01b900460ff1615610e16576040805162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015290519081900360640190fd5b33600081815260d1602052604090205460ff1615610e69576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6001600160a01b038516600090815260d16020526040902054859060ff1615610ec7576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6001600160a01b038516600090815260d16020526040902054859060ff1615610f25576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b610f30878787611f07565b979650505050505050565b60ce546001600160a01b03163314610f94576040805162461bcd60e51b815260206004820152601760248201527631b0b63632b91034b9903737ba103a34329037bbb732b960491b604482015290519081900360640190fd5b610f9d81611f8e565b50565b60385460ff1690565b6000610fb3611fea565b905090565b60cf54600090600160a01b900460ff161561100f576040805162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015290519081900360640190fd5b33600081815260d1602052604090205460ff1615611062576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260d16020526040902054849060ff16156110c0576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b610bc18585612025565b60cf546001600160a01b03163314611124576040805162461bcd60e51b815260206004820152601860248201527731b0b63632b91034b9903737ba103a3432903830bab9b2b960411b604482015290519081900360640190fd5b60cf805460ff60a01b191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b60cf54600090600160a01b900460ff16156111bd576040805162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015290519081900360640190fd5b33600081815260d1602052604090205460ff1615611210576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6001600160a01b038516600090815260d16020526040902054859060ff161561126e576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b611279868686612073565b9695505050505050565b60cf54600160a01b900460ff1690565b6001600160a01b031660009081526033602052604090205490565b60cc546001600160a01b031633146112fc576040805162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015290519081900360640190fd5b60cf54600160a01b900460ff1615611350576040805162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015290519081900360640190fd5b6001600160a01b038216600090815260d16020526040902054829060ff16156113ae576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6113b8838361214e565b505050565b6001600160a01b03811660009081526099602052604081206113de906121a6565b92915050565b60cf546001600160a01b0316331461143e576040805162461bcd60e51b815260206004820152601860248201527731b0b63632b91034b9903737ba103a3432903830bab9b2b960411b604482015290519081900360640190fd5b60cf805460ff60a01b1916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b60cc546001600160a01b031681565b60cc546001600160a01b031633146114e3576040805162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015290519081900360640190fd5b60cf54600160a01b900460ff1615611537576040805162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015290519081900360640190fd5b6001600160a01b038216600090815260d16020526040902054829060ff1615611595576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6113b883836121aa565b60ce546001600160a01b031690565b60378054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610aa55780601f10610a7a57610100808354040283529160200191610aa5565b60cf546001600160a01b031690565b60cf54600090600160a01b900460ff1615611675576040805162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015290519081900360640190fd5b33600081815260d1602052604090205460ff16156116c8576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260d16020526040902054849060ff1615611726576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b610bc18585612202565b60ce546001600160a01b03163314611789576040805162461bcd60e51b815260206004820152601760248201527631b0b63632b91034b9903737ba103a34329037bbb732b960491b604482015290519081900360640190fd5b610f9d81611df2565b60cf54600090600160a01b900460ff16156117e9576040805162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015290519081900360640190fd5b33600081815260d1602052604090205460ff161561183c576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6001600160a01b038416600090815260d16020526040902054849060ff161561189a576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b610bc1858561226a565b60ce546001600160a01b031633146118fd576040805162461bcd60e51b815260206004820152601760248201527631b0b63632b91034b9903737ba103a34329037bbb732b960491b604482015290519081900360640190fd5b6001600160a01b0381166119425760405162461bcd60e51b81526004018080602001828103825260238152602001806131516023913960400191505060405180910390fd5b60d080546001600160a01b0319166001600160a01b0383811691909117918290556040519116907fc67398012c111ce95ecb7429b933096c977380ee6c421175a71a4a4c6c88c06e90600090a250565b60d0546001600160a01b031690565b60cd546001600160a01b031681565b60cf54600160a01b900460ff1615611a04576040805162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b604482015290519081900360640190fd5b33600081815260d1602052604090205460ff1615611a57576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6001600160a01b038816600090815260d16020526040902054889060ff1615611ab5576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b6001600160a01b038816600090815260d16020526040902054889060ff1615611b13576040805162461bcd60e51b81526020600482015260166024820152600080516020613103833981519152604482015290519081900360640190fd5b611b228a8a8a8a8a8a8a61227e565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b60d0546001600160a01b03163314611bb8576040805162461bcd60e51b815260206004820152601d60248201527f63616c6c6572206973206e6f742074686520626c61636b6c6973746572000000604482015290519081900360640190fd5b6001600160a01b038116600081815260d16020526040808220805460ff19166001179055517fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b8559190a250565b6001600160a01b0316600090815260d1602052604090205460ff1690565b6000611c36611c2f612415565b8484612419565b50600192915050565b6000611c4a30612505565b15905090565b600054610100900460ff1680611c695750611c69611c3f565b80611c77575060005460ff16155b611cb25760405162461bcd60e51b815260040180806020018281038252602e815260200180613123602e913960400191505060405180910390fd5b600054610100900460ff16158015611cdd576000805460ff1961ff0019909116610100171660011790555b611ce561250b565b611d0882604051806040016040528060018152602001603160f81b8152506125ac565b611d118261266c565b8015611d23576000805461ff00191690555b5050565b600054610100900460ff1680611d405750611d40611c3f565b80611d4e575060005460ff16155b611d895760405162461bcd60e51b815260040180806020018281038252602e815260200180613123602e913960400191505060405180910390fd5b600054610100900460ff16158015611db4576000805460ff1961ff0019909116610100171660011790555b611dbc61250b565b611dc68383612732565b80156113b8576000805461ff0019169055505050565b6038805460ff191660ff92909216919091179055565b6001600160a01b038116611e4d576040805162461bcd60e51b815260206004820152601b60248201527f6163636f756e7420697320746865207a65726f20616464726573730000000000604482015290519081900360640190fd5b6001600160a01b038116301415611eab576040805162461bcd60e51b815260206004820152601860248201527f6163636f756e74206973207468697320636f6e74726163740000000000000000604482015290519081900360640190fd5b60ce546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a360ce80546001600160a01b0319166001600160a01b0392909216919091179055565b6000611f1484848461280a565b611f8484611f20612415565b611f7f85604051806060016040528060288152602001613196602891396001600160a01b038a16600090815260346020526040812090611f5e612415565b6001600160a01b031681526020810191909152604001600020549190612967565b612419565b5060019392505050565b60cf546040516001600160a01b038084169216907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a81190600090a360cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fb37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6120186129fe565b612020612a04565b612a0a565b6000611c36612032612415565b84611f7f8560346000612043612415565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612a6c565b600061207f848461226a565b50836001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1685856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156120fa5781810151838201526020016120e2565b50505050905090810190601f1680156121275780820380516001836020036101000a031916815260200191505b50935050505060405180910390a361213e84612505565b15611f8457611f84848484612acd565b60cc546001600160a01b0316331461219c576040805162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015290519081900360640190fd5b611d238282612ba7565b5490565b60cc546001600160a01b031633146121f8576040805162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f4741544557415960a01b604482015290519081900360640190fd5b611d238282612ca3565b6000611c3661220f612415565b84611f7f856040518060600160405280602581526020016132286025913960346000612239612415565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612967565b6000611c36612277612415565b848461280a565b834211156122d3576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b6000609a54888888612308609960008e6001600160a01b03166001600160a01b031681526020019081526020016000206121a6565b8960405160200180878152602001866001600160a01b03168152602001856001600160a01b031681526020018481526020018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600061237182612d95565b9050600061238182878787612de1565b9050896001600160a01b0316816001600160a01b0316146123e9576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a16600090815260996020526040902061240a90612f56565b611b228a8a8a612419565b3390565b6001600160a01b03831661245e5760405162461bcd60e51b81526004018080602001828103825260248152602001806132046024913960400191505060405180910390fd5b6001600160a01b0382166124a35760405162461bcd60e51b81526004018080602001828103825260228152602001806130996022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b3b151590565b600054610100900460ff16806125245750612524611c3f565b80612532575060005460ff16155b61256d5760405162461bcd60e51b815260040180806020018281038252602e815260200180613123602e913960400191505060405180910390fd5b600054610100900460ff16158015612598576000805460ff1961ff0019909116610100171660011790555b8015610f9d576000805461ff001916905550565b600054610100900460ff16806125c557506125c5611c3f565b806125d3575060005460ff16155b61260e5760405162461bcd60e51b815260040180806020018281038252602e815260200180613123602e913960400191505060405180910390fd5b600054610100900460ff16158015612639576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060659190915560665580156113b8576000805461ff0019169055505050565b600054610100900460ff16806126855750612685611c3f565b80612693575060005460ff16155b6126ce5760405162461bcd60e51b815260040180806020018281038252602e815260200180613123602e913960400191505060405180910390fd5b600054610100900460ff161580156126f9576000805460ff1961ff0019909116610100171660011790555b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9609a558015611d23576000805461ff00191690555050565b600054610100900460ff168061274b575061274b611c3f565b80612759575060005460ff16155b6127945760405162461bcd60e51b815260040180806020018281038252602e815260200180613123602e913960400191505060405180910390fd5b600054610100900460ff161580156127bf576000805460ff1961ff0019909116610100171660011790555b82516127d2906036906020860190612fc0565b5081516127e6906037906020850190612fc0565b506038805460ff1916601217905580156113b8576000805461ff0019169055505050565b6001600160a01b03831661284f5760405162461bcd60e51b81526004018080602001828103825260258152602001806131df6025913960400191505060405180910390fd5b6001600160a01b0382166128945760405162461bcd60e51b81526004018080602001828103825260238152602001806130546023913960400191505060405180910390fd5b61289f8383836113b8565b6128dc816040518060600160405280602681526020016130bb602691396001600160a01b0386166000908152603360205260409020549190612967565b6001600160a01b03808516600090815260336020526040808220939093559084168152205461290b9082612a6c565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156129f65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129bb5781810151838201526020016129a3565b50505050905090810190601f1680156129e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60655490565b60665490565b6000838383612a17612f5f565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b600082820183811015612ac6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604051635260769b60e11b815233600482018181526024830185905260606044840190815284516064850152845187946001600160a01b0386169463a4c0ed369490938993899360840190602085019080838360005b83811015612b3b578181015183820152602001612b23565b50505050905090810190601f168015612b685780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015612b8957600080fd5b505af1158015612b9d573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038216612bec5760405162461bcd60e51b81526004018080602001828103825260218152602001806131be6021913960400191505060405180910390fd5b612bf8826000836113b8565b612c3581604051806060016040528060228152602001613077602291396001600160a01b0385166000908152603360205260409020549190612967565b6001600160a01b038316600090815260336020526040902055603554612c5b9082612f63565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038216612cfe576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b612d0a600083836113b8565b603554612d179082612a6c565b6035556001600160a01b038216600090815260336020526040902054612d3d9082612a6c565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000612d9f611fea565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612e425760405162461bcd60e51b81526004018080602001828103825260228152602001806130e16022913960400191505060405180910390fd5b8360ff16601b1480612e5757508360ff16601c145b612e925760405162461bcd60e51b81526004018080602001828103825260228152602001806131746022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612eee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610bc1576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b80546001019055565b4690565b600082821115612fba576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061300157805160ff191683800117855561302e565b8280016001018555821561302e579182015b8281111561302e578251825591602001919060010190613013565b5061303a92915061303e565b5090565b5b8082111561303a576000815560010161303f56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c75656163636f756e7420697320626c61636b6c697374656400000000000000000000496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65646e657720626c61636b6c697374657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203816ea8d1fe3be74eb480ddec286dd1ea59a6fcb60be994dc0580acc187956e964736f6c634300060c0033","name":"TransparentUpgradeableProxy","is_blueprint":false,"license_type":"none","is_fully_verified":false,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"istanbul","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":true,"additional_sources":[],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}],"is_changed_bytecode":false,"is_partially_verified":true,"package_name":null,"constructor_args":null}