Overview
ETH Balance
1.005 ETH
Token Holdings
More Info
ContractCreator
Multi Chain
Multichain Addresses
8 addresses found via
Latest 25 from a total of 430 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Any Exec | 9125676 | 114 days 6 hrs ago | IN | 0 ETH | 0.00161477 | ||||
Any Call | 8899523 | 153 days 7 hrs ago | IN | 0 ETH | 0.00514172 | ||||
Any Exec | 8501421 | 223 days 4 hrs ago | IN | 0 ETH | 0.00249149 | ||||
Any Exec | 8501397 | 223 days 4 hrs ago | IN | 0 ETH | 0.00403862 | ||||
Any Exec | 8355721 | 248 days 5 hrs ago | IN | 0 ETH | 0.00012532 | ||||
Any Exec | 8355380 | 248 days 6 hrs ago | IN | 0 ETH | 0.00015474 | ||||
Any Exec | 8254404 | 266 days 6 hrs ago | IN | 0 ETH | 0.00145817 | ||||
Any Exec | 8134600 | 286 days 22 hrs ago | IN | 0 ETH | 0.00106065 | ||||
Any Exec | 8134524 | 286 days 22 hrs ago | IN | 0 ETH | 0.00061485 | ||||
Any Exec | 8128118 | 288 days 1 hr ago | IN | 0 ETH | 0.00198403 | ||||
Any Exec | 8090114 | 294 days 9 hrs ago | IN | 0 ETH | 0.00104933 | ||||
Deposit | 8090056 | 294 days 9 hrs ago | IN | 0.05 ETH | 0.00004552 | ||||
Any Exec | 8089967 | 294 days 9 hrs ago | IN | 0 ETH | 0.00078948 | ||||
Deposit | 8089955 | 294 days 9 hrs ago | IN | 0.03 ETH | 0.00004552 | ||||
Any Exec | 8089280 | 294 days 12 hrs ago | IN | 0 ETH | 0.00083658 | ||||
Any Exec | 8089214 | 294 days 12 hrs ago | IN | 0 ETH | 0.00073278 | ||||
Any Exec | 8089207 | 294 days 12 hrs ago | IN | 0 ETH | 0.00124088 | ||||
Deposit | 8089197 | 294 days 12 hrs ago | IN | 0.05 ETH | 0.00004552 | ||||
Deposit | 8083158 | 295 days 11 hrs ago | IN | 0.015 ETH | 0.00004552 | ||||
Deposit | 8082964 | 295 days 12 hrs ago | IN | 0.02 ETH | 0.00004552 | ||||
Any Exec | 8076714 | 296 days 12 hrs ago | IN | 0 ETH | 0 | ||||
Any Exec | 8076712 | 296 days 12 hrs ago | IN | 0 ETH | 0 | ||||
Deposit | 8064405 | 298 days 11 hrs ago | IN | 0.02 ETH | 0.00002841 | ||||
Deposit | 8064107 | 298 days 13 hrs ago | IN | 0.05 ETH | 0.00004551 | ||||
Any Exec | 7991885 | 310 days 8 hrs ago | IN | 0 ETH | 0.00560556 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
9717688 | 8 days 23 hrs ago | 0 ETH | ||||
9717613 | 8 days 23 hrs ago | 0 ETH | ||||
9125676 | 114 days 6 hrs ago | 0 ETH | ||||
9107347 | 117 days 9 hrs ago | 0 ETH | ||||
9106915 | 117 days 11 hrs ago | 0 ETH | ||||
8934490 | 147 days 4 hrs ago | 0 ETH | ||||
8934489 | 147 days 4 hrs ago | 0 ETH | ||||
8934487 | 147 days 4 hrs ago | 0 ETH | ||||
8934486 | 147 days 4 hrs ago | 0 ETH | ||||
8934408 | 147 days 4 hrs ago | 0 ETH | ||||
8934405 | 147 days 4 hrs ago | 0 ETH | ||||
8934308 | 147 days 4 hrs ago | 0 ETH | ||||
8934191 | 147 days 5 hrs ago | 0 ETH | ||||
8934152 | 147 days 5 hrs ago | 0 ETH | ||||
8934070 | 147 days 5 hrs ago | 0 ETH | ||||
8570122 | 211 days 10 hrs ago | 0.08999808 ETH | ||||
8570122 | 211 days 10 hrs ago | 0.01000192 ETH | ||||
8570122 | 211 days 10 hrs ago | 0.1 ETH | ||||
8565044 | 212 days 7 hrs ago | 0 ETH | ||||
8501421 | 223 days 4 hrs ago | 0 ETH | ||||
8501397 | 223 days 4 hrs ago | 0 ETH | ||||
8501095 | 223 days 5 hrs ago | 0 ETH | ||||
8415476 | 238 days 2 hrs ago | 0 ETH | ||||
8415394 | 238 days 2 hrs ago | 0 ETH | ||||
8391899 | 242 days 1 hr ago | 0 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x9fB83c...540C2e8d The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
AnyCallV6Proxy
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-10 */ /** *Submitted for verification at FtmScan.com on 2022-05-26 */ /** *Submitted for verification at Etherscan.io on 2022-05-10 */ /** *Submitted for verification at BscScan.com on 2022-05-10 */ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.6; /// IApp interface of the application interface IApp { /// (required) call on the destination chain to exec the interaction function anyExecute(bytes calldata _data) external returns (bool success, bytes memory result); /// (optional,advised) call back on the originating chain if the cross chain interaction fails function anyFallback(address _to, bytes calldata _data) external; } /// anycall executor is the delegator to execute contract calling (like a sandbox) contract AnyCallExecutor { struct Context { address from; uint256 fromChainID; uint256 nonce; } Context public context; address public creator; constructor() { creator = msg.sender; } function execute( address _to, bytes calldata _data, address _from, uint256 _fromChainID, uint256 _nonce ) external returns (bool success, bytes memory result) { if (msg.sender != creator) { return (false, "AnyCallExecutor: caller is not the creator"); } context = Context({from: _from, fromChainID: _fromChainID, nonce: _nonce}); (success, result) = IApp(_to).anyExecute(_data); context = Context({from: address(0), fromChainID: 0, nonce: 0}); } } /// anycall proxy is a universal protocal to complete cross-chain interaction. /// 1. the client call `anyCall` on the originating chain /// to submit a request for a cross chain interaction /// 2. the mpc network verify the request and call `anyExec` on the destination chain /// to execute a cross chain interaction /// 3. if step 2 failed and step 1 has set non-zero fallback, /// then call `anyFallback` on the originating chain contract AnyCallV6Proxy { // Packed fee information (only 1 storage slot) struct FeeData { uint128 accruedFees; uint128 premium; } // App config struct AppConfig { address app; // the application contract address address appAdmin; // account who admin the application's config uint256 appFlags; // flags of the application } // Src fee is (baseFees + msg.data.length*feesPerByte) struct SrcFeeConfig { uint256 baseFees; uint256 feesPerByte; } // Exec record struct ExecRecord { address to; bytes data; } // Context of the request on originating chain struct RequestContext { bytes32 txhash; address from; uint256 fromChainID; uint256 nonce; uint256 flags; } // anycall version string constant ANYCALL_VERSION = "v6.0"; // Flags constant uint256 public constant FLAG_MERGE_CONFIG_FLAGS = 0x1; uint256 public constant FLAG_PAY_FEE_ON_SRC = 0x1 << 1; // App Modes constant uint256 public constant APPMODE_USE_CUSTOM_SRC_FEES = 0x1; // Modes constant uint256 public constant PERMISSIONLESS_MODE = 0x1; uint256 public constant FREE_MODE = 0x1 << 1; // Extra cost of execution (SSTOREs.SLOADs,ADDs,etc..) // TODO: analysis to verify the correct overhead gas usage uint256 constant EXECUTION_OVERHEAD = 100000; // key is app address mapping(address => string) public appIdentifier; // key is appID, a unique identifier for each project mapping(string => AppConfig) public appConfig; mapping(string => mapping(address => bool)) public appExecWhitelist; mapping(string => address[]) public appHistoryWhitelist; mapping(string => bool) public appBlacklist; mapping(uint256 => SrcFeeConfig) public srcDefaultFees; // key is chainID mapping(string => mapping(uint256 => SrcFeeConfig)) public srcCustomFees; mapping(string => uint256) public appDefaultModes; mapping(string => mapping(uint256 => uint256)) public appCustomModes; mapping(address => bool) public isAdmin; address[] public admins; address public mpc; address public pendingMPC; uint256 public mode; bool public paused; uint256 public minReserveBudget; mapping(address => uint256) public executionBudget; FeeData private _feeData; // applications should give permission to this executor AnyCallExecutor public executor; mapping(bytes32 => ExecRecord) public retryExecRecords; mapping(bytes32 => bool) public execCompleted; uint256 nonce; uint private unlocked = 1; modifier lock() { require(unlocked == 1); unlocked = 0; _; unlocked = 1; } event LogAnyCall( address indexed from, address indexed to, bytes data, address _fallback, uint256 indexed toChainID, uint256 flags, string appID, uint256 nonce ); event LogAnyExec( bytes32 indexed txhash, address indexed from, address indexed to, uint256 fromChainID, uint256 nonce, bool success, bytes result ); event Deposit(address indexed account, uint256 amount); event Withdraw(address indexed account, uint256 amount); event SetBlacklist(string appID, bool flag); event SetWhitelist(string appID, address indexed whitelist, bool flag); event UpdatePremium(uint256 oldPremium, uint256 newPremium); event AddAdmin(address admin); event RemoveAdmin(address admin); event ChangeMPC(address indexed oldMPC, address indexed newMPC, uint256 timestamp); event ApplyMPC(address indexed oldMPC, address indexed newMPC, uint256 timestamp); event SetAppConfig(string appID, address indexed app, address indexed appAdmin, uint256 appFlags); event UpgradeApp(string appID, address indexed oldApp, address indexed newApp); event StoreRetryExecRecord(bytes32 indexed txhash, address indexed from, address indexed to, uint256 fromChainID, uint256 nonce, bytes data); event DoneRetryExecRecord(bytes32 indexed txhash, address indexed from, uint256 fromChainID, uint256 nonce); constructor( address _admin, address _mpc, uint128 _premium, uint256 _mode ) { require(_mpc != address(0), "zero mpc address"); if (_admin != address(0)) { isAdmin[_admin] = true; admins.push(_admin); } if (_mpc != _admin) { isAdmin[_mpc] = true; admins.push(_mpc); } mpc = _mpc; _feeData.premium = _premium; mode = _mode; executor = new AnyCallExecutor(); emit ApplyMPC(address(0), _mpc, block.timestamp); emit UpdatePremium(0, _premium); } /// @dev Access control function modifier onlyMPC() { require(msg.sender == mpc, "only MPC"); _; } /// @dev Access control function modifier onlyAdmin() { require(isAdmin[msg.sender], "only admin"); _; } /// @dev pausable control function modifier whenNotPaused() { require(!paused, "paused"); _; } /// @dev Charge an account for execution costs on this chain /// @param _from The account to charge for execution costs modifier charge(address _from, uint256 _flags) { uint256 gasUsed; // Prepare charge fee on the destination chain if (!_isSet(mode, FREE_MODE)) { if (!_isSet(_flags, FLAG_PAY_FEE_ON_SRC)) { require(executionBudget[_from] >= minReserveBudget, "less than min budget"); gasUsed = gasleft() + EXECUTION_OVERHEAD; } } _; // Charge fee on the dest chain if (gasUsed > 0) { uint256 totalCost = (gasUsed - gasleft()) * (tx.gasprice + _feeData.premium); uint256 budget = executionBudget[_from]; require(budget > totalCost, "no enough budget"); executionBudget[_from] = budget - totalCost; _feeData.accruedFees += uint128(totalCost); } } /// @dev set paused flag to pause/unpause functions function setPaused(bool _paused) external onlyAdmin { paused = _paused; } function _paySrcFees(uint256 fees) internal { require(msg.value >= fees, "no enough src fee"); if (fees > 0) { // pay fees (bool success,) = mpc.call{value: fees}(""); require(success); } if (msg.value > fees) { // return remaining amount (bool success,) = msg.sender.call{value: msg.value - fees}(""); require(success); } } /** @notice Submit a request for a cross chain interaction @param _to The target to interact with on `_toChainID` @param _data The calldata supplied for the interaction with `_to` @param _fallback The address to call back on the originating chain if the cross chain interaction fails for security reason, it must be zero or `msg.sender` address @param _toChainID The target chain id to interact with @param _flags The flags of app on the originating chain */ function anyCall( address _to, bytes calldata _data, address _fallback, uint256 _toChainID, uint256 _flags ) external lock payable whenNotPaused { require(_fallback == address(0) || _fallback == msg.sender, "wrong fallback"); string memory _appID = appIdentifier[msg.sender]; require(!appBlacklist[_appID], "blacklist"); bool _permissionlessMode = _isSet(mode, PERMISSIONLESS_MODE); if (!_permissionlessMode) { require(appExecWhitelist[_appID][msg.sender], "no permission"); } if (!_isSet(mode, FREE_MODE)) { AppConfig storage config = appConfig[_appID]; require( (_permissionlessMode && config.app == address(0)) || msg.sender == config.app, "app not exist" ); if (_isSet(_flags, FLAG_MERGE_CONFIG_FLAGS) && config.app == msg.sender) { _flags |= config.appFlags; } if (_isSet(_flags, FLAG_PAY_FEE_ON_SRC)) { uint256 fees = _calcSrcFees(_appID, _toChainID, _data.length); _paySrcFees(fees); } else if (msg.value > 0) { _paySrcFees(0); } } nonce++; emit LogAnyCall(msg.sender, _to, _data, _fallback, _toChainID, _flags, _appID, nonce); } /** @notice Execute a cross chain interaction @dev Only callable by the MPC @param _to The cross chain interaction target @param _data The calldata supplied for interacting with target @param _fallback The address to call on originating chain if the interaction fails @param _appID The app identifier to check whitelist @param _ctx The context of the request on originating chain */ function anyExec( address _to, bytes memory _data, address _fallback, string memory _appID, RequestContext memory _ctx ) external lock whenNotPaused charge(_ctx.from, _ctx.flags) onlyMPC { address _from = _ctx.from; require(_fallback == address(0) || _fallback == _from, "wrong fallback"); require(!appBlacklist[_appID], "blacklist"); if (!_isSet(mode, PERMISSIONLESS_MODE)) { require(appExecWhitelist[_appID][_to], "no permission"); } bytes32 uniqID = calcUniqID(_ctx.txhash, _from, _ctx.fromChainID, _ctx.nonce); require(!execCompleted[uniqID], "exec completed"); bool success; { bytes memory result; try executor.execute(_to, _data, _from, _ctx.fromChainID, _ctx.nonce) returns (bool succ, bytes memory res) { (success, result) = (succ, res); } catch Error(string memory reason) { result = bytes(reason); } catch (bytes memory reason) { result = reason; } emit LogAnyExec(_ctx.txhash, _from, _to, _ctx.fromChainID, _ctx.nonce, success, result); } if (success) { execCompleted[uniqID] = true; } else if (_fallback == address(0)) { retryExecRecords[uniqID] = ExecRecord(_to, _data); emit StoreRetryExecRecord(_ctx.txhash, _from, _to, _ctx.fromChainID, _ctx.nonce, _data); } else { // Call the fallback on the originating chain with the call information (to, data) nonce++; emit LogAnyCall( _from, _fallback, abi.encodeWithSelector(IApp.anyFallback.selector, _to, _data), address(0), _ctx.fromChainID, 0, // pay fee on dest chain _appID, nonce); } } function _isSet(uint256 _value, uint256 _testBits) internal pure returns (bool) { return (_value & _testBits) == _testBits; } // @notice Calc unique ID function calcUniqID(bytes32 _txhash, address _from, uint256 _fromChainID, uint256 _nonce) public pure returns (bytes32) { return keccak256(abi.encode(_txhash, _from, _fromChainID, _nonce)); } /// @notice Retry stored exec record function retryExec(bytes32 _txhash, address _from, uint256 _fromChainID, uint256 _nonce) external { bytes32 uniqID = calcUniqID(_txhash, _from, _fromChainID, _nonce); require(!execCompleted[uniqID], "exec completed"); ExecRecord storage record = retryExecRecords[uniqID]; require(record.to != address(0), "no retry record"); address _to = record.to; bytes memory _data = record.data; // Clear record record.to = address(0); record.data = ""; (bool success,) = executor.execute(_to, _data, _from, _fromChainID, _nonce); require(success); execCompleted[uniqID] = true; emit DoneRetryExecRecord(_txhash, _from, _fromChainID, _nonce); } /// @notice Deposit native currency crediting `_account` for execution costs on this chain /// @param _account The account to deposit and credit for function deposit(address _account) external payable { executionBudget[_account] += msg.value; emit Deposit(_account, msg.value); } /// @notice Withdraw a previous deposit from your account /// @param _amount The amount to withdraw from your account function withdraw(uint256 _amount) external { executionBudget[msg.sender] -= _amount; emit Withdraw(msg.sender, _amount); (bool success,) = msg.sender.call{value: _amount}(""); require(success); } /// @notice Withdraw all accrued execution fees /// @dev The MPC is credited in the native currency function withdrawAccruedFees() external { uint256 fees = _feeData.accruedFees; _feeData.accruedFees = 0; (bool success,) = mpc.call{value: fees}(""); require(success); } /// @notice Set app blacklist function setBlacklist(string calldata _appID, bool _flag) external onlyAdmin { appBlacklist[_appID] = _flag; emit SetBlacklist(_appID, _flag); } /// @notice Set app blacklist in batch function setBlacklists(string[] calldata _appIDs, bool _flag) external onlyAdmin { for (uint256 i = 0; i < _appIDs.length; i++) { this.setBlacklist(_appIDs[i], _flag); } } /// @notice Set the premimum for cross chain executions /// @param _premium The premium per gas function setPremium(uint128 _premium) external onlyAdmin { emit UpdatePremium(_feeData.premium, _premium); _feeData.premium = _premium; } /// @notice Set minimum exection budget for cross chain executions /// @param _minBudget The minimum exection budget function setMinReserveBudget(uint128 _minBudget) external onlyAdmin { minReserveBudget = _minBudget; } /// @notice Set mode function setMode(uint256 _mode) external onlyAdmin { mode = _mode; } /// @notice Change mpc function changeMPC(address _mpc) external onlyMPC { pendingMPC = _mpc; emit ChangeMPC(mpc, _mpc, block.timestamp); } /// @notice Apply mpc function applyMPC() external { require(msg.sender == pendingMPC); emit ApplyMPC(mpc, pendingMPC, block.timestamp); mpc = pendingMPC; pendingMPC = address(0); } /// @notice Get the total accrued fees in native currency /// @dev Fees increase when executing cross chain requests function accruedFees() external view returns(uint128) { return _feeData.accruedFees; } /// @notice Get the gas premium cost /// @dev This is similar to priority fee in eip-1559, except instead of going /// to the miner it is given to the MPC executing cross chain requests function premium() external view returns(uint128) { return _feeData.premium; } /// @notice Add admin function addAdmin(address _admin) external onlyMPC { require(!isAdmin[_admin]); isAdmin[_admin] = true; admins.push(_admin); emit AddAdmin(_admin); } /// @notice Remove admin function removeAdmin(address _admin) external onlyMPC { require(isAdmin[_admin]); isAdmin[_admin] = false; uint256 length = admins.length; for (uint256 i = 0; i < length - 1; i++) { if (admins[i] == _admin) { admins[i] = admins[length - 1]; break; } } admins.pop(); emit RemoveAdmin(_admin); } /// @notice Get all admins function getAllAdmins() external view returns (address[] memory) { return admins; } /// @notice Init app config function initAppConfig( string calldata _appID, address _app, address _admin, uint256 _flags, address[] calldata _whitelist ) external onlyAdmin { require(bytes(_appID).length > 0, "empty appID"); require(_app != address(0), "zero app address"); AppConfig storage config = appConfig[_appID]; require(config.app == address(0), "app exist"); appIdentifier[_app] = _appID; config.app = _app; config.appAdmin = _admin; config.appFlags = _flags; address[] memory whitelist = new address[](1+_whitelist.length); whitelist[0] = _app; for (uint256 i = 0; i < _whitelist.length; i++) { whitelist[i+1] = _whitelist[i]; } _setAppWhitelist(_appID, whitelist, true); emit SetAppConfig(_appID, _app, _admin, _flags); } /// @notice Update app config /// can be operated only by mpc or app admin /// the config.app will always keep unchanged here function updateAppConfig( address _app, address _admin, uint256 _flags, address[] calldata _whitelist ) external { string memory _appID = appIdentifier[_app]; AppConfig storage config = appConfig[_appID]; require(config.app == _app && _app != address(0), "app not exist"); require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid"); if (_admin != address(0)) { config.appAdmin = _admin; } config.appFlags = _flags; if (_whitelist.length > 0) { _setAppWhitelist(_appID, _whitelist, true); } emit SetAppConfig(_appID, _app, _admin, _flags); } /// @notice Upgrade app /// can be operated only by mpc or app admin /// change config.app to a new address /// require the `_newApp` is not inited function upgradeApp(address _oldApp, address _newApp) external { string memory _appID = appIdentifier[_oldApp]; AppConfig storage config = appConfig[_appID]; require(config.app == _oldApp && _oldApp != address(0), "app not exist"); require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid"); require(bytes(appIdentifier[_newApp]).length == 0, "new app is inited"); config.app = _newApp; emit UpgradeApp(_appID, _oldApp, _newApp); } /// @notice Add whitelist function addWhitelist(address _app, address[] memory _whitelist) external { string memory _appID = appIdentifier[_app]; AppConfig storage config = appConfig[_appID]; require(config.app == _app && _app != address(0), "app not exist"); require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid"); _setAppWhitelist(_appID, _whitelist, true); } /// @notice Remove whitelist function removeWhitelist(address _app, address[] memory _whitelist) external { string memory _appID = appIdentifier[_app]; AppConfig storage config = appConfig[_appID]; require(config.app == _app && _app != address(0), "app not exist"); require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid"); _setAppWhitelist(_appID, _whitelist, false); } function _setAppWhitelist(string memory _appID, address[] memory _whitelist, bool _flag) internal { mapping(address => bool) storage whitelist = appExecWhitelist[_appID]; address[] storage historyWhitelist = appHistoryWhitelist[_appID]; address addr; for (uint256 i = 0; i < _whitelist.length; i++) { addr = _whitelist[i]; if (whitelist[addr] == _flag) { continue; } if (_flag) { historyWhitelist.push(addr); } whitelist[addr] = _flag; emit SetWhitelist(_appID, addr, _flag); } } /// @notice Get history whitelist length function getHistoryWhitelistLength(string memory _appID) external view returns (uint256) { return appHistoryWhitelist[_appID].length; } /// @notice Get all history whitelist function getAllHistoryWhitelist(string memory _appID) external view returns (address[] memory) { return appHistoryWhitelist[_appID]; } /// @notice Tidy history whitelist to be same with actual whitelist function tidyHistoryWhitelist(string memory _appID) external { mapping(address => bool) storage actualWhitelist = appExecWhitelist[_appID]; address[] storage historyWhitelist = appHistoryWhitelist[_appID]; uint256 histLength = historyWhitelist.length; uint256 popIndex = histLength; address addr; for (uint256 i = 0; i < popIndex; ) { addr = historyWhitelist[i]; if (actualWhitelist[addr]) { i++; } else { popIndex--; historyWhitelist[i] = historyWhitelist[popIndex]; } } for (uint256 i = popIndex; i < histLength; i++) { historyWhitelist.pop(); } } /// @notice Set default src fees function setDefaultSrcFees( uint256[] calldata _toChainIDs, uint256[] calldata _baseFees, uint256[] calldata _feesPerByte ) external onlyAdmin { uint256 length = _toChainIDs.length; require(length == _baseFees.length && length == _feesPerByte.length); for (uint256 i = 0; i < length; i++) { srcDefaultFees[_toChainIDs[i]] = SrcFeeConfig(_baseFees[i], _feesPerByte[i]); } } /// @notice Set custom src fees function setCustomSrcFees( address _app, uint256[] calldata _toChainIDs, uint256[] calldata _baseFees, uint256[] calldata _feesPerByte ) external onlyAdmin { string memory _appID = appIdentifier[_app]; AppConfig storage config = appConfig[_appID]; require(config.app == _app && _app != address(0), "app not exist"); require(_isSet(config.appFlags, FLAG_PAY_FEE_ON_SRC), "flag not set"); uint256 length = _toChainIDs.length; require(length == _baseFees.length && length == _feesPerByte.length); mapping(uint256 => SrcFeeConfig) storage _srcFees = srcCustomFees[_appID]; for (uint256 i = 0; i < length; i++) { _srcFees[_toChainIDs[i]] = SrcFeeConfig(_baseFees[i], _feesPerByte[i]); } } /// @notice Set app modes function setAppModes( address _app, uint256 _appDefaultMode, uint256[] calldata _toChainIDs, uint256[] calldata _appCustomModes ) external onlyAdmin { string memory _appID = appIdentifier[_app]; AppConfig storage config = appConfig[_appID]; require(config.app == _app && _app != address(0), "app not exist"); uint256 length = _toChainIDs.length; require(length == _appCustomModes.length); appDefaultModes[_appID] = _appDefaultMode; for (uint256 i = 0; i < length; i++) { appCustomModes[_appID][_toChainIDs[i]] = _appCustomModes[i]; } } /// @notice Calc fees function calcSrcFees( address _app, uint256 _toChainID, uint256 _dataLength ) external view returns (uint256) { string memory _appID = appIdentifier[_app]; return _calcSrcFees(_appID, _toChainID, _dataLength); } /// @notice Calc fees function calcSrcFees( string calldata _appID, uint256 _toChainID, uint256 _dataLength ) external view returns (uint256) { return _calcSrcFees(_appID, _toChainID, _dataLength); } /// @notice Is use custom src fees function isUseCustomSrcFees(string memory _appID, uint256 _toChainID) public view returns (bool) { uint256 _appMode = appCustomModes[_appID][_toChainID]; if (_isSet(_appMode, APPMODE_USE_CUSTOM_SRC_FEES)) { return true; } _appMode = appDefaultModes[_appID]; return _isSet(_appMode, APPMODE_USE_CUSTOM_SRC_FEES); } function _calcSrcFees( string memory _appID, uint256 _toChainID, uint256 _dataLength ) internal view returns (uint256) { SrcFeeConfig memory customFees = srcCustomFees[_appID][_toChainID]; uint256 customBaseFees = customFees.baseFees; uint256 customFeesPerBytes = customFees.feesPerByte; if (isUseCustomSrcFees(_appID, _toChainID)) { return customBaseFees + _dataLength * customFeesPerBytes; } SrcFeeConfig memory defaultFees = srcDefaultFees[_toChainID]; uint256 defaultBaseFees = defaultFees.baseFees; uint256 defaultFeesPerBytes = defaultFees.feesPerByte; uint256 baseFees = (customBaseFees > defaultBaseFees) ? customBaseFees : defaultBaseFees; uint256 feesPerByte = (customFeesPerBytes > defaultFeesPerBytes) ? customFeesPerBytes : defaultFeesPerBytes; return baseFees + _dataLength * feesPerByte; } }
[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_mpc","type":"address"},{"internalType":"uint128","name":"_premium","type":"uint128"},{"internalType":"uint256","name":"_mode","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AddAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ApplyMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ChangeMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DoneRetryExecRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"_fallback","type":"address"},{"indexed":true,"internalType":"uint256","name":"toChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"flags","type":"uint256"},{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"LogAnyCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"result","type":"bytes"}],"name":"LogAnyExec","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"RemoveAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"app","type":"address"},{"indexed":true,"internalType":"address","name":"appAdmin","type":"address"},{"indexed":false,"internalType":"uint256","name":"appFlags","type":"uint256"}],"name":"SetAppConfig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SetBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"whitelist","type":"address"},{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SetWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"StoreRetryExecRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPremium","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPremium","type":"uint256"}],"name":"UpdatePremium","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"oldApp","type":"address"},{"indexed":true,"internalType":"address","name":"newApp","type":"address"}],"name":"UpgradeApp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"APPMODE_USE_CUSTOM_SRC_FEES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLAG_MERGE_CONFIG_FLAGS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLAG_PAY_FEE_ON_SRC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_MODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMISSIONLESS_MODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accruedFees","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"admins","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_fallback","type":"address"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_flags","type":"uint256"}],"name":"anyCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_fallback","type":"address"},{"internalType":"string","name":"_appID","type":"string"},{"components":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"fromChainID","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"flags","type":"uint256"}],"internalType":"struct AnyCallV6Proxy.RequestContext","name":"_ctx","type":"tuple"}],"name":"anyExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appConfig","outputs":[{"internalType":"address","name":"app","type":"address"},{"internalType":"address","name":"appAdmin","type":"address"},{"internalType":"uint256","name":"appFlags","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"appCustomModes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appDefaultModes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"appExecWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"appHistoryWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"appIdentifier","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_dataLength","type":"uint256"}],"name":"calcSrcFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_dataLength","type":"uint256"}],"name":"calcSrcFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_txhash","type":"bytes32"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_fromChainID","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"calcUniqID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_mpc","type":"address"}],"name":"changeMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"execCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"executionBudget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"contract AnyCallExecutor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllAdmins","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"getAllHistoryWhitelist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"getHistoryWhitelistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"address","name":"_app","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_flags","type":"uint256"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"initAppConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"uint256","name":"_toChainID","type":"uint256"}],"name":"isUseCustomSrcFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minReserveBudget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMPC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premium","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_txhash","type":"bytes32"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_fromChainID","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"retryExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"retryExecRecords","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256","name":"_appDefaultMode","type":"uint256"},{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_appCustomModes","type":"uint256[]"}],"name":"setAppModes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_appIDs","type":"string[]"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBlacklists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_baseFees","type":"uint256[]"},{"internalType":"uint256[]","name":"_feesPerByte","type":"uint256[]"}],"name":"setCustomSrcFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_baseFees","type":"uint256[]"},{"internalType":"uint256[]","name":"_feesPerByte","type":"uint256[]"}],"name":"setDefaultSrcFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_minBudget","type":"uint128"}],"name":"setMinReserveBudget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mode","type":"uint256"}],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_premium","type":"uint128"}],"name":"setPremium","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"srcCustomFees","outputs":[{"internalType":"uint256","name":"baseFees","type":"uint256"},{"internalType":"uint256","name":"feesPerByte","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"srcDefaultFees","outputs":[{"internalType":"uint256","name":"baseFees","type":"uint256"},{"internalType":"uint256","name":"feesPerByte","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"tidyHistoryWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_flags","type":"uint256"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"updateAppConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldApp","type":"address"},{"internalType":"address","name":"_newApp","type":"address"}],"name":"upgradeApp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAccruedFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x60806040526004361061038b5760003560e01c806384271a6c116101dc578063bd45c4e711610102578063d8f1bd68116100a0578063f340fa011161006f578063f340fa0114610b98578063f75c266414610bab578063f830e7b414610bcb578063fadd10a214610beb57600080fd5b8063d8f1bd6814610b0e578063dfde3fdb14610b2e578063e0a73a9314610b5e578063e9523c9714610b8357600080fd5b8063c1e26e33116100dc578063c1e26e3314610aae578063c3294bb5146105bb578063c34c08e514610ace578063d72dd3b414610aee57600080fd5b8063bd45c4e714610a7b578063bf5d3f2414610a8e578063c0ab8899146109af57600080fd5b8063ab818db71161017a578063afdd2aed11610149578063afdd2aed146109f9578063b041758714610a19578063b63b38d014610a46578063b854bb5614610a5b57600080fd5b8063ab818db71461098f578063ac61b46f146109af578063ada82c7d146109c4578063aeb79211146109d957600080fd5b806395ec1be8116101b657806395ec1be8146105bb57806397f8a94f146109045780639a295d4914610924578063a86529d81461094457600080fd5b806384271a6c1461087557806389168e1814610895578063908c07c5146108b557600080fd5b806354b09ac5116102c1578063682c20581161025f578063732a8eda1161022e578063732a8eda146107c357806374bdda60146107fb578063796a9e43146108285780637a67bbf91461085557600080fd5b8063682c2058146107095780636c0cf7b71461073b5780636e6e8a021461078357806370480275146107a357600080fd5b80635c975abb1161029b5780635c975abb146106665780635ffdc9ca14610680578063667cb4b7146106c957806366c96b37146106e957600080fd5b806354b09ac5146106105780635689f039146106305780635b7b018c1461064657600080fd5b80632898bff81161032e578063304281cb11610308578063304281cb1461053c5780633083d598146105bb578063439b3e1c146105d05780634a578150146105f057600080fd5b80632898bff8146104d8578063295a5212146104f85780632e1a7d4d1461051c57600080fd5b80631785f53c1161036a5780631785f53c1461043a57806322b6a4e11461045a57806324d7806c146104885780632687b2b1146104b857600080fd5b80626a5fa11461039057806314bfd6d0146103e057806316c38b3c14610418575b600080fd5b34801561039c57600080fd5b506103cb6103ab3660046139ed565b805160208183018101805160048252928201919093012091525460ff1681565b60405190151581526020015b60405180910390f35b3480156103ec57600080fd5b506104006103fb366004613a21565b610c0b565b6040516001600160a01b0390911681526020016103d7565b34801561042457600080fd5b50610438610433366004613a48565b610c35565b005b34801561044657600080fd5b50610438610455366004613a81565b610c80565b34801561046657600080fd5b5061047a610475366004613a21565b610e42565b6040516103d7929190613aec565b34801561049457600080fd5b506103cb6104a3366004613a81565b60096020526000908152604090205460ff1681565b3480156104c457600080fd5b506104386104d3366004613ba4565b610ef1565b3480156104e457600080fd5b506104386104f3366004613c41565b611206565b34801561050457600080fd5b5061050e600d5481565b6040519081526020016103d7565b34801561052857600080fd5b50610438610537366004613a21565b611243565b34801561054857600080fd5b506105956105573660046139ed565b805180820160209081018051600180835293830192909401919091209290528154908201546002909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016103d7565b3480156105c757600080fd5b5061050e600181565b3480156105dc57600080fd5b506104386105eb366004613c41565b611301565b3480156105fc57600080fd5b5061043861060b366004613c6a565b61139d565b34801561061c57600080fd5b5061050e61062b366004613d61565b611a89565b34801561063c57600080fd5b5061050e600f5481565b34801561065257600080fd5b50610438610661366004613a81565b611ad0565b34801561067257600080fd5b50600e546103cb9060ff1681565b34801561068c57600080fd5b506106b461069b366004613a21565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016103d7565b3480156106d557600080fd5b506104386106e4366004613d9c565b611b56565b3480156106f557600080fd5b5061050e610704366004613dcf565b611d63565b34801561071557600080fd5b506011546001600160801b03165b6040516001600160801b0390911681526020016103d7565b34801561074757600080fd5b5061050e610756366004613e1f565b81516020818401810180516008825292820194820194909420919093529091526000908152604090205481565b34801561078f57600080fd5b5061043861079e366004613e63565b611db1565b3480156107af57600080fd5b506104386107be366004613a81565b611f0c565b3480156107cf57600080fd5b5061050e6107de3660046139ed565b805160208183018101805160078252928201919093012091525481565b34801561080757600080fd5b5061050e610816366004613a81565b60106020526000908152604090205481565b34801561083457600080fd5b506108486108433660046139ed565b611ff8565b6040516103d79190613f23565b34801561086157600080fd5b50610438610870366004613f70565b612072565b34801561088157600080fd5b50610438610890366004613d61565b61213a565b3480156108a157600080fd5b506104386108b0366004613fc6565b6123af565b3480156108c157600080fd5b506106b46108d0366004613e1f565b8151602081840181018051600682529282019482019490942091909352909152600090815260409020805460019091015482565b34801561091057600080fd5b5061040061091f366004613e1f565b61249f565b34801561093057600080fd5b5061043861093f36600461405f565b6124e6565b34801561095057600080fd5b506103cb61095f3660046140c9565b81516020818401810180516002825292820194820194909420919093529091526000908152604090205460ff1681565b34801561099b57600080fd5b5061050e6109aa36600461410d565b6126d9565b3480156109bb57600080fd5b5061050e600281565b3480156109d057600080fd5b50610438612795565b3480156109e557600080fd5b506104386109f4366004614140565b6127d6565b348015610a0557600080fd5b50610438610a143660046141ae565b6129ef565b348015610a2557600080fd5b50610a39610a34366004613a81565b612c50565b6040516103d79190614238565b348015610a5257600080fd5b50610438612cea565b348015610a6757600080fd5b506103cb610a76366004613e1f565b612d71565b610438610a8936600461424b565b612de8565b348015610a9a57600080fd5b50610438610aa93660046142c1565b613160565b348015610aba57600080fd5b50610438610ac93660046139ed565b613201565b348015610ada57600080fd5b50601254610400906001600160a01b031681565b348015610afa57600080fd5b50610438610b09366004613a21565b613383565b348015610b1a57600080fd5b50610438610b29366004613e63565b6133b7565b348015610b3a57600080fd5b506103cb610b49366004613a21565b60146020526000908152604090205460ff1681565b348015610b6a57600080fd5b50601154600160801b90046001600160801b0316610723565b348015610b8f57600080fd5b5061084861350c565b610438610ba6366004613a81565b61356e565b348015610bb757600080fd5b50600b54610400906001600160a01b031681565b348015610bd757600080fd5b50600c54610400906001600160a01b031681565b348015610bf757600080fd5b5061050e610c063660046139ed565b6135dc565b600a8181548110610c1b57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526009602052604090205460ff16610c6d5760405162461bcd60e51b8152600401610c64906142f8565b60405180910390fd5b600e805460ff1916911515919091179055565b600b546001600160a01b03163314610caa5760405162461bcd60e51b8152600401610c649061431c565b6001600160a01b03811660009081526009602052604090205460ff16610ccf57600080fd5b6001600160a01b0381166000908152600960205260408120805460ff19169055600a54905b610cff600183614354565b811015610dcb57826001600160a01b0316600a8281548110610d2357610d23614367565b6000918252602090912001546001600160a01b031603610db957600a610d4a600184614354565b81548110610d5a57610d5a614367565b600091825260209091200154600a80546001600160a01b039092169183908110610d8657610d86614367565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610dcb565b80610dc38161437d565b915050610cf4565b50600a805480610ddd57610ddd614396565b6000828152602090819020600019908301810180546001600160a01b03191690559091019091556040516001600160a01b03841681527f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b910160405180910390a15050565b601360205260009081526040902080546001820180546001600160a01b039092169291610e6e906143ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9a906143ac565b8015610ee75780601f10610ebc57610100808354040283529160200191610ee7565b820191906000526020600020905b815481529060010190602001808311610eca57829003601f168201915b5050505050905082565b3360009081526009602052604090205460ff16610f205760405162461bcd60e51b8152600401610c64906142f8565b85610f5b5760405162461bcd60e51b815260206004820152600b60248201526a195b5c1d1e48185c1c125160aa1b6044820152606401610c64565b6001600160a01b038516610fa45760405162461bcd60e51b815260206004820152601060248201526f7a65726f20617070206164647265737360801b6044820152606401610c64565b600060018888604051610fb89291906143e6565b90815260405190819003602001902080549091506001600160a01b03161561100e5760405162461bcd60e51b8152602060048201526009602482015268185c1c08195e1a5cdd60ba1b6044820152606401610c64565b6001600160a01b0386166000908152602081905260409020611031888a83614445565b5080546001600160a01b038088166001600160a01b031992831617835560018084018054928916929093169190911790915560028201859055600090611078908490614505565b6001600160401b0381111561108f5761108f6138f9565b6040519080825280602002602001820160405280156110b8578160200160208202803683370190505b50905086816000815181106110cf576110cf614367565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b838110156111675784848281811061110c5761110c614367565b90506020020160208101906111219190613a81565b8261112d836001614505565b8151811061113d5761113d614367565b6001600160a01b03909216602092830291909101909101528061115f8161437d565b9150506110f2565b506111ac89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250600191506136049050565b856001600160a01b0316876001600160a01b03167fe6814e9c971e79d8cfa0cb8a20ef274c921710f5df7a6e19ca62fb272dc45cf58b8b896040516111f393929190614541565b60405180910390a3505050505050505050565b3360009081526009602052604090205460ff166112355760405162461bcd60e51b8152600401610c64906142f8565b6001600160801b0316600f55565b3360009081526010602052604081208054839290611262908490614354565b909155505060405181815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a26000336001600160a01b0316826040515b60006040518083038185875af1925050503d80600081146112ea576040519150601f19603f3d011682016040523d82523d6000602084013e6112ef565b606091505b50509050806112fd57600080fd5b5050565b3360009081526009602052604090205460ff166113305760405162461bcd60e51b8152600401610c64906142f8565b60115460408051600160801b9092046001600160801b039081168352831660208301527fec6b0785fd83ba51c66ca8c8bb1e4fbdd02a0cced0457a21583fdf399eb3e000910160405180910390a1601180546001600160801b03928316600160801b029216919091179055565b6016546001146113ac57600080fd5b6000601655600e5460ff16156113ed5760405162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b6044820152606401610c64565b806020015181608001516000611408600d5460029081161490565b6114895760028083161461148957600f546001600160a01b03841660009081526010602052604090205410156114775760405162461bcd60e51b81526020600482015260146024820152731b195cdcc81d1a185b881b5a5b88189d5919d95d60621b6044820152606401610c64565b620186a05a6114869190614505565b90505b600b546001600160a01b031633146114b35760405162461bcd60e51b8152600401610c649061431c565b60208401516001600160a01b03871615806114df5750806001600160a01b0316876001600160a01b0316145b61151c5760405162461bcd60e51b815260206004820152600e60248201526d77726f6e672066616c6c6261636b60901b6044820152606401610c64565b60048660405161152c9190614565565b9081526040519081900360200190205460ff16156115785760405162461bcd60e51b8152602060048201526009602482015268189b1858dadb1a5cdd60ba1b6044820152606401610c64565b600d546001908116146115f9576002866040516115959190614565565b90815260408051602092819003830190206001600160a01b038c166000908152925290205460ff166115f95760405162461bcd60e51b815260206004820152600d60248201526c3737903832b936b4b9b9b4b7b760991b6044820152606401610c64565b600061161386600001518388604001518960600151611a89565b60008181526014602052604090205490915060ff16156116665760405162461bcd60e51b815260206004820152600e60248201526d195e1958c818dbdb5c1b195d195960921b6044820152606401610c64565b60006060601260009054906101000a90046001600160a01b03166001600160a01b031663978802398d8d878c604001518d606001516040518663ffffffff1660e01b81526004016116bb959493929190614581565b6000604051808303816000875af19250505080156116fb57506040513d6000823e601f3d908101601f191682016040526116f891908101906145bf565b60015b61176657611707614656565b806308c379a00361172d575061171b614672565b80611726575061172f565b905061176c565b505b3d808015611759576040519150601f19603f3d011682016040523d82523d6000602084013e61175e565b606091505b50905061176c565b90925090505b8b6001600160a01b0316846001600160a01b031689600001517f0a2dd9a3c77dd69c3b4a5c5ef91fe5f43dfa5365029792e918b9db16ad2c35aa8b604001518c6060015187876040516117c294939291906146fb565b60405180910390a45080156117ef576000828152601460205260409020805460ff19166001179055611975565b6001600160a01b0389166118b7576040805180820182526001600160a01b038d8116825260208083018e815260008781526013909252939020825181546001600160a01b031916921691909117815591519091906001820190611852908261472c565b509050508a6001600160a01b0316836001600160a01b031688600001517fdad73de9dcb4c7934ccf673a532ca1547846f401631886090cb5c83c2e9ccd498a604001518b606001518f6040516118aa939291906147eb565b60405180910390a4611975565b601580549060006118c78361437d565b91905055508660400151896001600160a01b0316846001600160a01b03167fa17aef042e1a5dd2b8e68f0d0d92f9a6a0b35dc25be1d12c0cb3135bfd8951c963a35fe8bf60e01b8f8f604051602401611921929190613aec565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506000808e60155460405161196c95949392919061480a565b60405180910390a45b505081159050611a7a5760115460009061199f90600160801b90046001600160801b03163a614505565b5a6119aa9084614354565b6119b49190614858565b6001600160a01b038516600090815260106020526040902054909150818111611a125760405162461bcd60e51b815260206004820152601060248201526f1b9bc8195b9bdd59da08189d5919d95d60821b6044820152606401610c64565b611a1c8282614354565b6001600160a01b03861660009081526010602052604081209190915560118054849290611a539084906001600160801b031661486f565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555050505b50506001601655505050505050565b604080516020808201969096526001600160a01b03949094168482015260608401929092526080808401919091528151808403909101815260a09092019052805191012090565b600b546001600160a01b03163314611afa5760405162461bcd60e51b8152600401610c649061431c565b600c80546001600160a01b0319166001600160a01b03838116918217909255600b54604051428152919216907f587ad0bc9a6955b6c850bc4f90ab8c66b32e2a6919d4244e459ac74ffa4a88849060200160405180910390a350565b6001600160a01b03821660009081526020819052604081208054611b79906143ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba5906143ac565b8015611bf25780601f10611bc757610100808354040283529160200191611bf2565b820191906000526020600020905b815481529060010190602001808311611bd557829003601f168201915b505050505090506000600182604051611c0b9190614565565b90815260405190819003602001902080549091506001600160a01b03908116908516148015611c4257506001600160a01b03841615155b611c5e5760405162461bcd60e51b8152600401610c6490614896565b600b546001600160a01b0316331480611c83575060018101546001600160a01b031633145b611c9f5760405162461bcd60e51b8152600401610c64906148bd565b6001600160a01b03831660009081526020819052604090208054611cc2906143ac565b159050611d055760405162461bcd60e51b81526020600482015260116024820152701b995dc8185c1c081a5cc81a5b9a5d1959607a1b6044820152606401610c64565b80546001600160a01b0319166001600160a01b038481169182178355604051908616907fd037ce9f8e96b2c7cdea421a50a484949e5f9e1e4914834059493cbfbf65862290611d55908690614238565b60405180910390a350505050565b6000611da885858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792508691506137409050565b95945050505050565b6001600160a01b03821660009081526020819052604081208054611dd4906143ac565b80601f0160208091040260200160405190810160405280929190818152602001828054611e00906143ac565b8015611e4d5780601f10611e2257610100808354040283529160200191611e4d565b820191906000526020600020905b815481529060010190602001808311611e3057829003601f168201915b505050505090506000600182604051611e669190614565565b90815260405190819003602001902080549091506001600160a01b03908116908516148015611e9d57506001600160a01b03841615155b611eb95760405162461bcd60e51b8152600401610c6490614896565b600b546001600160a01b0316331480611ede575060018101546001600160a01b031633145b611efa5760405162461bcd60e51b8152600401610c64906148bd565b611f0682846001613604565b50505050565b600b546001600160a01b03163314611f365760405162461bcd60e51b8152600401610c649061431c565b6001600160a01b03811660009081526009602052604090205460ff1615611f5c57600080fd5b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600a805491820181559093527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890920180546001600160a01b0319168417905590519182527fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba910160405180910390a150565b606060038260405161200a9190614565565b908152604080519182900360209081018320805480830285018301909352828452919083018282801561206657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612048575b50505050509050919050565b3360009081526009602052604090205460ff166120a15760405162461bcd60e51b8152600401610c64906142f8565b60005b82811015611f06573063bf5d3f248585848181106120c4576120c4614367565b90506020028101906120d691906148dd565b856040518463ffffffff1660e01b81526004016120f593929190614923565b600060405180830381600087803b15801561210f57600080fd5b505af1158015612123573d6000803e3d6000fd5b5050505080806121329061437d565b9150506120a4565b600061214885858585611a89565b60008181526014602052604090205490915060ff161561219b5760405162461bcd60e51b815260206004820152600e60248201526d195e1958c818dbdb5c1b195d195960921b6044820152606401610c64565b600081815260136020526040902080546001600160a01b03166121f25760405162461bcd60e51b815260206004820152600f60248201526e1b9bc81c995d1c9e481c9958dbdc99608a1b6044820152606401610c64565b80546001820180546001600160a01b039092169160009190612213906143ac565b80601f016020809104026020016040519081016040528092919081815260200182805461223f906143ac565b801561228c5780601f106122615761010080835404028352916020019161228c565b820191906000526020600020905b81548152906001019060200180831161226f57829003601f168201915b505086546001600160a01b031916875550506040805160208101909152600081529192505060018401906122c0908261472c565b50601254604051639788023960e01b81526000916001600160a01b0316906397880239906122fa90869086908d908d908d90600401614581565b6000604051808303816000875af1158015612319573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261234191908101906145bf565b5090508061234e57600080fd5b60008581526014602052604090819020805460ff19166001179055516001600160a01b038916908a907f819e22d91cf6246af3647f0722340d66b71cae69d9c6b1cbbf015ed0ec46c9c4906111f3908b908b90918252602082015260400190565b3360009081526009602052604090205460ff166123de5760405162461bcd60e51b8152600401610c64906142f8565b8483811480156123ed57508082145b6123f657600080fd5b60005b8181101561249557604051806040016040528087878481811061241e5761241e614367565b90506020020135815260200185858481811061243c5761243c614367565b90506020020135815250600560008a8a8581811061245c5761245c614367565b6020908102929092013583525081810192909252604001600020825181559101516001909101558061248d8161437d565b9150506123f9565b5050505050505050565b815160208184018101805160038252928201918501919091209190528054829081106124ca57600080fd5b6000918252602090912001546001600160a01b03169150829050565b3360009081526009602052604090205460ff166125155760405162461bcd60e51b8152600401610c64906142f8565b6001600160a01b03861660009081526020819052604081208054612538906143ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612564906143ac565b80156125b15780601f10612586576101008083540402835291602001916125b1565b820191906000526020600020905b81548152906001019060200180831161259457829003601f168201915b5050505050905060006001826040516125ca9190614565565b90815260405190819003602001902080549091506001600160a01b0390811690891614801561260157506001600160a01b03881615155b61261d5760405162461bcd60e51b8152600401610c6490614896565b8483811461262a57600080fd5b8760078460405161263b9190614565565b9081526040519081900360200190205560005b818110156126cd5785858281811061266857612668614367565b9050602002013560088560405161267f9190614565565b908152602001604051809103902060008a8a858181106126a1576126a1614367565b9050602002013581526020019081526020016000208190555080806126c59061437d565b91505061264e565b50505050505050505050565b6001600160a01b038316600090815260208190526040812080548291906126ff906143ac565b80601f016020809104026020016040519081016040528092919081815260200182805461272b906143ac565b80156127785780601f1061274d57610100808354040283529160200191612778565b820191906000526020600020905b81548152906001019060200180831161275b57829003601f168201915b5050505050905061278a818585613740565b9150505b9392505050565b601180546fffffffffffffffffffffffffffffffff198116909155600b546040516001600160801b03909216916000916001600160a01b03169083906112ad565b6001600160a01b038516600090815260208190526040812080546127f9906143ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612825906143ac565b80156128725780601f1061284757610100808354040283529160200191612872565b820191906000526020600020905b81548152906001019060200180831161285557829003601f168201915b50505050509050600060018260405161288b9190614565565b90815260405190819003602001902080549091506001600160a01b039081169088161480156128c257506001600160a01b03871615155b6128de5760405162461bcd60e51b8152600401610c6490614896565b600b546001600160a01b0316331480612903575060018101546001600160a01b031633145b61291f5760405162461bcd60e51b8152600401610c64906148bd565b6001600160a01b0386161561294c576001810180546001600160a01b0319166001600160a01b0388161790555b600281018590558215612999576129998285858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525060019250613604915050565b856001600160a01b0316876001600160a01b03167fe6814e9c971e79d8cfa0cb8a20ef274c921710f5df7a6e19ca62fb272dc45cf584886040516129de929190614949565b60405180910390a350505050505050565b3360009081526009602052604090205460ff16612a1e5760405162461bcd60e51b8152600401610c64906142f8565b6001600160a01b03871660009081526020819052604081208054612a41906143ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612a6d906143ac565b8015612aba5780601f10612a8f57610100808354040283529160200191612aba565b820191906000526020600020905b815481529060010190602001808311612a9d57829003601f168201915b505050505090506000600182604051612ad39190614565565b90815260405190819003602001902080549091506001600160a01b03908116908a16148015612b0a57506001600160a01b03891615155b612b265760405162461bcd60e51b8152600401610c6490614896565b600280820154811614612b6a5760405162461bcd60e51b815260206004820152600c60248201526b199b1859c81b9bdd081cd95d60a21b6044820152606401610c64565b868581148015612b7957508084145b612b8257600080fd5b6000600684604051612b949190614565565b9081526020016040518091039020905060005b82811015612c425760405180604001604052808a8a84818110612bcc57612bcc614367565b905060200201358152602001888884818110612bea57612bea614367565b905060200201358152508260008d8d85818110612c0957612c09614367565b60209081029290920135835250818101929092526040016000208251815591015160019091015580612c3a8161437d565b915050612ba7565b505050505050505050505050565b60006020819052908152604090208054612c69906143ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612c95906143ac565b8015612ce25780601f10612cb757610100808354040283529160200191612ce2565b820191906000526020600020905b815481529060010190602001808311612cc557829003601f168201915b505050505081565b600c546001600160a01b03163314612d0157600080fd5b600c54600b546040514281526001600160a01b0392831692909116907fa2e29fe96457476993f3188189d22408c86df0c977ec90a31b979c899800d0659060200160405180910390a3600c8054600b80546001600160a01b03199081166001600160a01b03841617909155169055565b600080600884604051612d849190614565565b9081526040805160209281900383019020600086815292529020549050600180821603612db5576001915050612de2565b600784604051612dc59190614565565b9081526040519081900360200190205490506001808216145b9150505b92915050565b601654600114612df757600080fd5b6000601655600e5460ff1615612e385760405162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b6044820152606401610c64565b6001600160a01b0383161580612e5657506001600160a01b03831633145b612e935760405162461bcd60e51b815260206004820152600e60248201526d77726f6e672066616c6c6261636b60901b6044820152606401610c64565b3360009081526020819052604081208054612ead906143ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612ed9906143ac565b8015612f265780601f10612efb57610100808354040283529160200191612f26565b820191906000526020600020905b815481529060010190602001808311612f0957829003601f168201915b50505050509050600481604051612f3d9190614565565b9081526040519081900360200190205460ff1615612f895760405162461bcd60e51b8152602060048201526009602482015268189b1858dadb1a5cdd60ba1b6044820152606401610c64565b6000612f9a600d5460019081161490565b90508061300c57600282604051612fb19190614565565b9081526040805160209281900383019020336000908152925290205460ff1661300c5760405162461bcd60e51b815260206004820152600d60248201526c3737903832b936b4b9b9b4b7b760991b6044820152606401610c64565b600d546002908116146130e457600060018360405161302b9190614565565b90815260200160405180910390209050818015613050575080546001600160a01b0316155b80613064575080546001600160a01b031633145b6130805760405162461bcd60e51b8152600401610c6490614896565b600180851614801561309b575080546001600160a01b031633145b156130aa578060020154841793505b6002808516036130d25760006130c184878a613740565b90506130cc8161382d565b506130e2565b34156130e2576130e2600061382d565b505b601580549060006130f48361437d565b919050555083886001600160a01b0316336001600160a01b03167fa17aef042e1a5dd2b8e68f0d0d92f9a6a0b35dc25be1d12c0cb3135bfd8951c98a8a8a89896015546040516131499695949392919061496b565b60405180910390a450506001601655505050505050565b3360009081526009602052604090205460ff1661318f5760405162461bcd60e51b8152600401610c64906142f8565b80600484846040516131a29291906143e6565b908152604051908190036020018120805492151560ff19909316929092179091557f8450ad9faca1edf7a8a033ed0adf98a354d14b22658565ca76f3e11e881947c1906131f490859085908590614923565b60405180910390a1505050565b60006002826040516132139190614565565b9081526020016040518091039020905060006003836040516132359190614565565b9081526040519081900360200190208054909150806000805b8281101561332b5784818154811061326857613268614367565b60009182526020808320909101546001600160a01b03168083529088905260409091205490925060ff16156132a957806132a18161437d565b91505061324e565b826132b3816149bb565b9350508483815481106132c8576132c8614367565b9060005260206000200160009054906101000a90046001600160a01b03168582815481106132f8576132f8614367565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061324e565b50815b8381101561337a578480548061334657613346614396565b600082815260209020810160001990810180546001600160a01b0319169055019055806133728161437d565b91505061332e565b50505050505050565b3360009081526009602052604090205460ff166133b25760405162461bcd60e51b8152600401610c64906142f8565b600d55565b6001600160a01b038216600090815260208190526040812080546133da906143ac565b80601f0160208091040260200160405190810160405280929190818152602001828054613406906143ac565b80156134535780601f1061342857610100808354040283529160200191613453565b820191906000526020600020905b81548152906001019060200180831161343657829003601f168201915b50505050509050600060018260405161346c9190614565565b90815260405190819003602001902080549091506001600160a01b039081169085161480156134a357506001600160a01b03841615155b6134bf5760405162461bcd60e51b8152600401610c6490614896565b600b546001600160a01b03163314806134e4575060018101546001600160a01b031633145b6135005760405162461bcd60e51b8152600401610c64906148bd565b611f0682846000613604565b6060600a80548060200260200160405190810160405280929190818152602001828054801561356457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613546575b5050505050905090565b6001600160a01b03811660009081526010602052604081208054349290613596908490614505565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b60006003826040516135ee9190614565565b9081526040519081900360200190205492915050565b60006002846040516136169190614565565b9081526020016040518091039020905060006003856040516136389190614565565b90815260405190819003602001902090506000805b855181101561337a5785818151811061366857613668614367565b6020908102919091018101516001600160a01b03811660009081529186905260409091205490925060ff1615158515151461372e5784156136cf5782546001810184556000848152602090200180546001600160a01b0319166001600160a01b0384161790555b6001600160a01b03821660008181526020869052604090819020805460ff1916881515179055517f5059f2158bd5a3ba277fdb58bf30871e09bae3987abede6055be2e87bbf7f79690613725908a9089906149d2565b60405180910390a25b806137388161437d565b91505061364d565b6000806006856040516137539190614565565b9081526040805160209281900383018120600088815290845282902081830190925281548082526001909201549281018390529250906137938787612d71565b156137b6576137a28186614858565b6137ac9083614505565b935050505061278e565b60008681526005602090815260408083208151808301909252805480835260019091015492820183905290929091908286116137f257826137f4565b855b905060008286116138055782613807565b855b9050613813818b614858565b61381d9083614505565b9c9b505050505050505050505050565b803410156138715760405162461bcd60e51b81526020600482015260116024820152706e6f20656e6f756768207372632066656560781b6044820152606401610c64565b80156138d957600b546040516000916001600160a01b03169083908381818185875af1925050503d80600081146138c4576040519150601f19603f3d011682016040523d82523d6000602084013e6138c9565b606091505b50509050806138d757600080fd5b505b803411156138f6576000336138ee8334614354565b6040516112ad565b50565b634e487b7160e01b600052604160045260246000fd5b60a081018181106001600160401b038211171561392e5761392e6138f9565b60405250565b601f8201601f191681016001600160401b0381118282101715613959576139596138f9565b6040525050565b60006001600160401b03821115613979576139796138f9565b50601f01601f191660200190565b600061399283613960565b60405161399f8282613934565b8092508481528585850111156139b457600080fd5b8484602083013760006020868301015250509392505050565b600082601f8301126139de57600080fd5b61278e83833560208501613987565b6000602082840312156139ff57600080fd5b81356001600160401b03811115613a1557600080fd5b612dde848285016139cd565b600060208284031215613a3357600080fd5b5035919050565b80151581146138f657600080fd5b600060208284031215613a5a57600080fd5b813561278e81613a3a565b80356001600160a01b0381168114613a7c57600080fd5b919050565b600060208284031215613a9357600080fd5b61278e82613a65565b60005b83811015613ab7578181015183820152602001613a9f565b50506000910152565b60008151808452613ad8816020860160208601613a9c565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090613b1090830184613ac0565b949350505050565b60008083601f840112613b2a57600080fd5b5081356001600160401b03811115613b4157600080fd5b602083019150836020828501011115613b5957600080fd5b9250929050565b60008083601f840112613b7257600080fd5b5081356001600160401b03811115613b8957600080fd5b6020830191508360208260051b8501011115613b5957600080fd5b600080600080600080600060a0888a031215613bbf57600080fd5b87356001600160401b0380821115613bd657600080fd5b613be28b838c01613b18565b9099509750879150613bf660208b01613a65565b9650613c0460408b01613a65565b955060608a0135945060808a0135915080821115613c2157600080fd5b50613c2e8a828b01613b60565b989b979a50959850939692959293505050565b600060208284031215613c5357600080fd5b81356001600160801b038116811461278e57600080fd5b6000806000806000858703610120811215613c8457600080fd5b613c8d87613a65565b955060208701356001600160401b0380821115613ca957600080fd5b818901915089601f830112613cbd57600080fd5b613ccc8a833560208501613987565b9650613cda60408a01613a65565b95506060890135915080821115613cf057600080fd5b50613cfd89828a016139cd565b93505060a0607f1982011215613d1257600080fd5b50604051613d1f8161390f565b60808701358152613d3260a08801613a65565b602082015260c0870135604082015260e087013560608201526101009096013560808701525092959194509290565b60008060008060808587031215613d7757600080fd5b84359350613d8760208601613a65565b93969395505050506040820135916060013590565b60008060408385031215613daf57600080fd5b613db883613a65565b9150613dc660208401613a65565b90509250929050565b60008060008060608587031215613de557600080fd5b84356001600160401b03811115613dfb57600080fd5b613e0787828801613b18565b90989097506020870135966040013595509350505050565b60008060408385031215613e3257600080fd5b82356001600160401b03811115613e4857600080fd5b613e54858286016139cd565b95602094909401359450505050565b60008060408385031215613e7657600080fd5b613e7f83613a65565b91506020808401356001600160401b0380821115613e9c57600080fd5b818601915086601f830112613eb057600080fd5b813581811115613ec257613ec26138f9565b8060051b9150604051613ed785840182613934565b81815291830184019184810189841115613ef057600080fd5b938501935b83851015613f1357613f0685613a65565b8152938501938501613ef5565b5080955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613f645783516001600160a01b031683529284019291840191600101613f3f565b50909695505050505050565b600080600060408486031215613f8557600080fd5b83356001600160401b03811115613f9b57600080fd5b613fa786828701613b60565b9094509250506020840135613fbb81613a3a565b809150509250925092565b60008060008060008060608789031215613fdf57600080fd5b86356001600160401b0380821115613ff657600080fd5b6140028a838b01613b60565b9098509650602089013591508082111561401b57600080fd5b6140278a838b01613b60565b9096509450604089013591508082111561404057600080fd5b5061404d89828a01613b60565b979a9699509497509295939492505050565b6000806000806000806080878903121561407857600080fd5b61408187613a65565b95506020870135945060408701356001600160401b03808211156140a457600080fd5b6140b08a838b01613b60565b9096509450606089013591508082111561404057600080fd5b600080604083850312156140dc57600080fd5b82356001600160401b038111156140f257600080fd5b6140fe858286016139cd565b925050613dc660208401613a65565b60008060006060848603121561412257600080fd5b61412b84613a65565b95602085013595506040909401359392505050565b60008060008060006080868803121561415857600080fd5b61416186613a65565b945061416f60208701613a65565b93506040860135925060608601356001600160401b0381111561419157600080fd5b61419d88828901613b60565b969995985093965092949392505050565b60008060008060008060006080888a0312156141c957600080fd5b6141d288613a65565b965060208801356001600160401b03808211156141ee57600080fd5b6141fa8b838c01613b60565b909850965060408a013591508082111561421357600080fd5b61421f8b838c01613b60565b909650945060608a0135915080821115613c2157600080fd5b60208152600061278e6020830184613ac0565b60008060008060008060a0878903121561426457600080fd5b61426d87613a65565b955060208701356001600160401b0381111561428857600080fd5b61429489828a01613b18565b90965094506142a7905060408801613a65565b925060608701359150608087013590509295509295509295565b6000806000604084860312156142d657600080fd5b83356001600160401b038111156142ec57600080fd5b613fa786828701613b18565b6020808252600a908201526937b7363c9030b236b4b760b11b604082015260600190565b6020808252600890820152676f6e6c79204d504360c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115612de257612de261433e565b634e487b7160e01b600052603260045260246000fd5b60006001820161438f5761438f61433e565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181811c908216806143c057607f821691505b6020821081036143e057634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b601f82111561444057600081815260208120601f850160051c8101602086101561441d5750805b601f850160051c820191505b8181101561443c57828155600101614429565b5050505b505050565b6001600160401b0383111561445c5761445c6138f9565b6144708361446a83546143ac565b836143f6565b6000601f8411600181146144a4576000851561448c5750838201355b600019600387901b1c1916600186901b1783556144fe565b600083815260209020601f19861690835b828110156144d557868501358255602094850194600190920191016144b5565b50868210156144f25760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b80820180821115612de257612de261433e565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000614555604083018587614518565b9050826020830152949350505050565b60008251614577818460208701613a9c565b9190910192915050565b600060018060a01b03808816835260a060208401526145a360a0840188613ac0565b9516604083015250606081019290925260809091015292915050565b600080604083850312156145d257600080fd5b82516145dd81613a3a565b60208401519092506001600160401b038111156145f957600080fd5b8301601f8101851361460a57600080fd5b805161461581613960565b6040516146228282613934565b82815287602084860101111561463757600080fd5b614648836020830160208701613a9c565b809450505050509250929050565b600060033d111561466f5760046000803e5060005160e01c5b90565b600060443d10156146805790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156146af57505050505090565b82850191508151818111156146c75750505050505090565b843d87010160208285010111156146e15750505050505090565b6146f060208286010187613934565b509095945050505050565b84815283602082015282151560408201526080606082015260006147226080830184613ac0565b9695505050505050565b81516001600160401b03811115614745576147456138f9565b6147598161475384546143ac565b846143f6565b602080601f83116001811461478e57600084156147765750858301515b600019600386901b1c1916600185901b17855561443c565b600085815260208120601f198616915b828110156147bd5788860151825594840194600190910190840161479e565b50858210156147db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b838152826020820152606060408201526000611da86060830184613ac0565b60a08152600061481d60a0830188613ac0565b6001600160a01b03871660208401526040830186905282810360608401526148458186613ac0565b9150508260808301529695505050505050565b8082028115828204841417612de257612de261433e565b6001600160801b0381811683821601908082111561488f5761488f61433e565b5092915050565b6020808252600d908201526c185c1c081b9bdd08195e1a5cdd609a1b604082015260600190565b602080825260069082015265199bdc989a5960d21b604082015260600190565b6000808335601e198436030181126148f457600080fd5b8301803591506001600160401b0382111561490e57600080fd5b602001915036819003821315613b5957600080fd5b604081526000614937604083018587614518565b90508215156020830152949350505050565b60408152600061495c6040830185613ac0565b90508260208301529392505050565b60a08152600061497f60a08301888a614518565b6001600160a01b03871660208401526040830186905282810360608401526149a78186613ac0565b915050826080830152979650505050505050565b6000816149ca576149ca61433e565b506000190190565b6040815260006149e56040830185613ac0565b90508215156020830152939250505056fea264697066735822122076373aaa9697106cfd80942154e4a7e6cd19ec891857c36532a6b79ae506107064736f6c63430008110033
Deployed Bytecode Sourcemap
2069:25875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3894:43;;;;;;;;;;-1:-1:-1;3894:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1967:14:1;;1960:22;1942:41;;1930:2;1915:18;3894:43:0;;;;;;;;4281:23;;;;;;;;;;-1:-1:-1;4281:23:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2343:32:1;;;2325:51;;2313:2;2298:18;4281:23:0;2179:203:1;8524:87:0;;;;;;;;;;-1:-1:-1;8524:87:0;;;;;:::i;:::-;;:::i;:::-;;18042:421;;;;;;;;;;-1:-1:-1;18042:421:0;;;;;:::i;:::-;;:::i;4654:54::-;;;;;;;;;;-1:-1:-1;4654:54:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4235:39::-;;;;;;;;;;-1:-1:-1;4235:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18641:908;;;;;;;;;;-1:-1:-1;18641:908:0;;;;;:::i;:::-;;:::i;16597:116::-;;;;;;;;;;-1:-1:-1;16597:116:0;;;;;:::i;:::-;;:::i;4372:19::-;;;;;;;;;;;;;;;;;;;6306:25:1;;;6294:2;6279:18;4372:19:0;6160:177:1;15154:237:0;;;;;;;;;;-1:-1:-1;15154:237:0;;;;;:::i;:::-;;:::i;3706:45::-;;;;;;;;;;-1:-1:-1;3706:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3706:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;6600:15:1;;;6582:34;;6652:15;;;;6647:2;6632:18;;6625:43;6684:18;;;6677:34;6532:2;6517:18;3706:45:0;6342:375:1;3039:53:0;;;;;;;;;;;;3089:3;3039:53;;16302:160;;;;;;;;;;-1:-1:-1;16302:160:0;;;;;:::i;:::-;;:::i;11495:1998::-;;;;;;;;;;-1:-1:-1;11495:1998:0;;;;;:::i;:::-;;:::i;13679:205::-;;;;;;;;;;-1:-1:-1;13679:205:0;;;;;:::i;:::-;;:::i;4425:31::-;;;;;;;;;;;;;;;;16865:139;;;;;;;;;;-1:-1:-1;16865:139:0;;;;;:::i;:::-;;:::i;4398:18::-;;;;;;;;;;-1:-1:-1;4398:18:0;;;;;;;;3944:54;;;;;;;;;;-1:-1:-1;3944:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;8857:25:1;;;8913:2;8898:18;;8891:34;;;;8830:18;3944:54:0;8683:248:1;20593:516:0;;;;;;;;;;-1:-1:-1;20593:516:0;;;;;:::i;:::-;;:::i;26325:223::-;;;;;;;;;;-1:-1:-1;26325:223:0;;;;;:::i;:::-;;:::i;17374:100::-;;;;;;;;;;-1:-1:-1;17446:8:0;:20;-1:-1:-1;;;;;17446:20:0;17374:100;;;-1:-1:-1;;;;;9917:47:1;;;9899:66;;9887:2;9872:18;17374:100:0;9753:218:1;4158:68:0;;;;;;;;;;-1:-1:-1;4158:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4158:68:0;;;;;;;;;21148:404;;;;;;;;;;-1:-1:-1;21148:404:0;;;;;:::i;:::-;;:::i;17814:190::-;;;;;;;;;;-1:-1:-1;17814:190:0;;;;;:::i;:::-;;:::i;4102:49::-;;;;;;;;;;-1:-1:-1;4102:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4463:50;;;;;;;;;;-1:-1:-1;4463:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;22918:148;;;;;;;;;;-1:-1:-1;22918:148:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15981:207::-;;;;;;;;;;-1:-1:-1;15981:207:0;;;;;:::i;:::-;;:::i;13934:764::-;;;;;;;;;;-1:-1:-1;13934:764:0;;;;;:::i;:::-;;:::i;23944:460::-;;;;;;;;;;-1:-1:-1;23944:460:0;;;;;:::i;:::-;;:::i;4023:72::-;;;;;;;;;;-1:-1:-1;4023:72:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4023:72:0;;;;;;;;;;;;;;;3832:55;;;;;;;;;;-1:-1:-1;3832:55:0;;;;;:::i;:::-;;:::i;25317:672::-;;;;;;;;;;-1:-1:-1;25317:672:0;;;;;:::i;:::-;;:::i;3758:67::-;;;;;;;;;;-1:-1:-1;3758:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3758:67:0;;;;;;;;;;;26024:266;;;;;;;;;;-1:-1:-1;26024:266:0;;;;;:::i;:::-;;:::i;3099:54::-;;;;;;;;;;;;3145:8;3099:54;;15509:210;;;;;;;;;;;;;:::i;19698:719::-;;;;;;;;;;-1:-1:-1;19698:719:0;;;;;:::i;:::-;;:::i;24449:829::-;;;;;;;;;;-1:-1:-1;24449:829:0;;;;;:::i;:::-;;:::i;3591:47::-;;;;;;;;;;-1:-1:-1;3591:47:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17039:200::-;;;;;;;;;;;;;:::i;26596:376::-;;;;;;;;;;-1:-1:-1;26596:376:0;;;;;:::i;:::-;;:::i;9602:1429::-;;;;;;:::i;:::-;;:::i;15762:167::-;;;;;;;;;;-1:-1:-1;15762:167:0;;;;;:::i;:::-;;:::i;23147:751::-;;;;;;;;;;-1:-1:-1;23147:751:0;;;;;:::i;:::-;;:::i;4614:31::-;;;;;;;;;;-1:-1:-1;4614:31:0;;;;-1:-1:-1;;;;;4614:31:0;;;16747:82;;;;;;;;;;-1:-1:-1;16747:82:0;;;;;:::i;:::-;;:::i;21594:408::-;;;;;;;;;;-1:-1:-1;21594:408:0;;;;;:::i;:::-;;:::i;4717:45::-;;;;;;;;;;-1:-1:-1;4717:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17687:92;;;;;;;;;;-1:-1:-1;17755:8:0;:16;-1:-1:-1;;;17755:16:0;;-1:-1:-1;;;;;17755:16:0;17687:92;;18503:97;;;;;;;;;;;;;:::i;14865:153::-;;;;;;:::i;:::-;;:::i;4313:18::-;;;;;;;;;;-1:-1:-1;4313:18:0;;;;-1:-1:-1;;;;;4313:18:0;;;4338:25;;;;;;;;;;-1:-1:-1;4338:25:0;;;;-1:-1:-1;;;;;4338:25:0;;;22718:149;;;;;;;;;;-1:-1:-1;22718:149:0;;;;;:::i;:::-;;:::i;4281:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4281:23:0;;-1:-1:-1;4281:23:0;:::o;8524:87::-;7311:10;7303:19;;;;:7;:19;;;;;;;;7295:42;;;;-1:-1:-1;;;7295:42:0;;;;;;;:::i;:::-;;;;;;;;;8587:6:::1;:16:::0;;-1:-1:-1;;8587:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8524:87::o;18042:421::-;7181:3;;-1:-1:-1;;;;;7181:3:0;7167:10;:17;7159:38;;;;-1:-1:-1;;;7159:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18115:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;18107:24;;;::::0;::::1;;-1:-1:-1::0;;;;;18142:15:0;::::1;18160:5;18142:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;18142:23:0::1;::::0;;18193:6:::1;:13:::0;;18217:181:::1;18241:10;18250:1;18241:6:::0;:10:::1;:::i;:::-;18237:1;:14;18217:181;;;18290:6;-1:-1:-1::0;;;;;18277:19:0::1;:6;18284:1;18277:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18277:9:0::1;:19:::0;18273:114:::1;;18329:6;18336:10;18345:1;18336:6:::0;:10:::1;:::i;:::-;18329:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;18317:6:::1;:9:::0;;-1:-1:-1;;;;;18329:18:0;;::::1;::::0;18324:1;;18317:9;::::1;;;;;:::i;:::-;;;;;;;;;:30;;;;;-1:-1:-1::0;;;;;18317:30:0::1;;;;;-1:-1:-1::0;;;;;18317:30:0::1;;;;;;18366:5;;18273:114;18253:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18217:181;;;;18408:6;:12;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18408:12:0;;;;;;;-1:-1:-1;;;;;;18408:12:0::1;::::0;;;;;;;;18436:19:::1;::::0;-1:-1:-1;;;;;2343:32:1;;2325:51;;18436:19:0::1;::::0;2298:18:1;18436:19:0::1;;;;;;;18096:367;18042:421:::0;:::o;4654:54::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4654:54:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18641:908::-;7311:10;7303:19;;;;:7;:19;;;;;;;;7295:42;;;;-1:-1:-1;;;7295:42:0;;;;;;;:::i;:::-;18855:24;18847:48:::1;;;::::0;-1:-1:-1;;;18847:48:0;;20890:2:1;18847:48:0::1;::::0;::::1;20872:21:1::0;20929:2;20909:18;;;20902:30;-1:-1:-1;;;20948:18:1;;;20941:41;20999:18;;18847:48:0::1;20688:335:1::0;18847:48:0::1;-1:-1:-1::0;;;;;18914:18:0;::::1;18906:47;;;::::0;-1:-1:-1;;;18906:47:0;;21230:2:1;18906:47:0::1;::::0;::::1;21212:21:1::0;21269:2;21249:18;;;21242:30;-1:-1:-1;;;21288:18:1;;;21281:46;21344:18;;18906:47:0::1;21028:340:1::0;18906:47:0::1;18966:24;18993:9;19003:6;;18993:17;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;19029:10;;18993:17;;-1:-1:-1;;;;;;19029:10:0::1;:24:::0;19021:46:::1;;;::::0;-1:-1:-1;;;19021:46:0;;21853:2:1;19021:46:0::1;::::0;::::1;21835:21:1::0;21892:1;21872:18;;;21865:29;-1:-1:-1;;;21910:18:1;;;21903:39;21959:18;;19021:46:0::1;21651:332:1::0;19021:46:0::1;-1:-1:-1::0;;;;;19080:19:0;::::1;:13;:19:::0;;;::::1;::::0;;;;;;:28:::1;19102:6:::0;;19080:19;:28:::1;:::i;:::-;-1:-1:-1::0;19121:17:0;;-1:-1:-1;;;;;19121:17:0;;::::1;-1:-1:-1::0;;;;;;19121:17:0;;::::1;;::::0;;;19149:15;;::::1;:24:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;19184:15:::1;::::0;::::1;:24:::0;;;19121:10:::1;::::0;19264:19:::1;::::0;19266:10;;19264:19:::1;:::i;:::-;-1:-1:-1::0;;;;;19250:34:0::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;19250:34:0::1;;19221:63;;19310:4;19295:9;19305:1;19295:12;;;;;;;;:::i;:::-;;;;;;:19;-1:-1:-1::0;;;;;19295:19:0::1;;;-1:-1:-1::0;;;;;19295:19:0::1;;;::::0;::::1;19330:9;19325:105;19345:21:::0;;::::1;19325:105;;;19405:10;;19416:1;19405:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19388:9:::0;19398:3:::1;:1:::0;19400::::1;19398:3;:::i;:::-;19388:14;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19388:30:0;;::::1;:14;::::0;;::::1;::::0;;;;;;;:30;19368:3;::::1;::::0;::::1;:::i;:::-;;;;19325:105;;;;19440:41;19457:6;;19440:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;19465:9:0;;-1:-1:-1;19476:4:0::1;::::0;-1:-1:-1;19440:16:0::1;::::0;-1:-1:-1;19440:41:0:i:1;:::-;19526:6;-1:-1:-1::0;;;;;19499:42:0::1;19520:4;-1:-1:-1::0;;;;;19499:42:0::1;;19512:6;;19534;19499:42;;;;;;;;:::i;:::-;;;;;;;;18836:713;;18641:908:::0;;;;;;;:::o;16597:116::-;7311:10;7303:19;;;;:7;:19;;;;;;;;7295:42;;;;-1:-1:-1;;;7295:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16676:29:0::1;:16;:29:::0;16597:116::o;15154:237::-;15225:10;15209:27;;;;:15;:27;;;;;:38;;15240:7;;15209:27;:38;;15240:7;;15209:38;:::i;:::-;;;;-1:-1:-1;;15263:29:0;;6306:25:1;;;15272:10:0;;15263:29;;6294:2:1;6279:18;15263:29:0;;;;;;;15304:12;15321:10;-1:-1:-1;;;;;15321:15:0;15344:7;15321:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15303:53;;;15375:7;15367:16;;;;;;15198:193;15154:237;:::o;16302:160::-;7311:10;7303:19;;;;:7;:19;;;;;;;;7295:42;;;;-1:-1:-1;;;7295:42:0;;;;;;;:::i;:::-;16389:8:::1;:16:::0;16375:41:::1;::::0;;-1:-1:-1;;;16389:16:0;;::::1;-1:-1:-1::0;;;;;16389:16:0;;::::1;25208:34:1::0;;25278:15;;25273:2;25258:18;;25251:43;16375:41:0::1;::::0;25128:18:1;16375:41:0::1;;;;;;;16427:8;:27:::0;;-1:-1:-1;;;;;16427:27:0;;::::1;-1:-1:-1::0;;;16427:27:0::1;::::0;::::1;::::0;;;::::1;::::0;;16302:160::o;11495:1998::-;4858:8;;4870:1;4858:13;4850:22;;;;;;4894:1;4883:8;:12;7450:6:::1;::::0;::::1;;7449:7;7441:26;;;::::0;-1:-1:-1;;;7441:26:0;;25507:2:1;7441:26:0::1;::::0;::::1;25489:21:1::0;25546:1;25526:18;;;25519:29;-1:-1:-1;;;25564:18:1;;;25557:36;25610:18;;7441:26:0::1;25305:329:1::0;7441:26:0::1;11701:4:::2;:9;;;11712:4;:10;;;7683:15;7772:23;7779:4;;3370:8;13600:18:::0;;;13599:33;;13501:139;7772:23:::2;7767:267;;3145:8;13600:18:::0;;;13599:33;7812:211:::2;;7907:16;::::0;-1:-1:-1;;;;;7881:22:0;::::2;;::::0;;;:15:::2;:22;::::0;;;;;:42:::2;;7873:75;;;::::0;-1:-1:-1;;;7873:75:0;;25841:2:1;7873:75:0::2;::::0;::::2;25823:21:1::0;25880:2;25860:18;;;25853:30;-1:-1:-1;;;25899:18:1;;;25892:50;25959:18;;7873:75:0::2;25639:344:1::0;7873:75:0::2;3549:6;7977:9;:30;;;;:::i;:::-;7967:40;;7812:211;7181:3:::3;::::0;-1:-1:-1;;;;;7181:3:0::3;7167:10;:17;7159:38;;;;-1:-1:-1::0;;;7159:38:0::3;;;;;;;:::i;:::-;11759:9:::4;::::0;::::4;::::0;-1:-1:-1;;;;;11789:23:0;::::4;::::0;;:45:::4;;;11829:5;-1:-1:-1::0;;;;;11816:18:0::4;:9;-1:-1:-1::0;;;;;11816:18:0::4;;11789:45;11781:72;;;::::0;-1:-1:-1;;;11781:72:0;;26190:2:1;11781:72:0::4;::::0;::::4;26172:21:1::0;26229:2;26209:18;;;26202:30;-1:-1:-1;;;26248:18:1;;;26241:44;26302:18;;11781:72:0::4;25988:338:1::0;11781:72:0::4;11875:12;11888:6;11875:20;;;;;;:::i;:::-;::::0;;;::::4;::::0;;;;;::::4;::::0;;;;::::4;;11874:21;11866:43;;;::::0;-1:-1:-1;;;11866:43:0;;26827:2:1;11866:43:0::4;::::0;::::4;26809:21:1::0;26866:1;26846:18;;;26839:29;-1:-1:-1;;;26884:18:1;;;26877:39;26933:18;;11866:43:0::4;26625:332:1::0;11866:43:0::4;11934:4;::::0;3324:3:::4;13600:18:::0;;;13599:33;11922:122:::4;;11985:16;12002:6;11985:24;;;;;;:::i;:::-;::::0;;;::::4;::::0;;::::4;::::0;;;;;;;;-1:-1:-1;;;;;11985:29:0;::::4;;::::0;;;;;;;;::::4;;11977:55;;;::::0;-1:-1:-1;;;11977:55:0;;27164:2:1;11977:55:0::4;::::0;::::4;27146:21:1::0;27203:2;27183:18;;;27176:30;-1:-1:-1;;;27222:18:1;;;27215:43;27275:18;;11977:55:0::4;26962:337:1::0;11977:55:0::4;12056:14;12073:60;12084:4;:11;;;12097:5;12104:4;:16;;;12122:4;:10;;;12073;:60::i;:::-;12153:21;::::0;;;:13:::4;:21;::::0;;;;;12056:77;;-1:-1:-1;12153:21:0::4;;12152:22;12144:49;;;::::0;-1:-1:-1;;;12144:49:0;;27506:2:1;12144:49:0::4;::::0;::::4;27488:21:1::0;27545:2;27525:18;;;27518:30;-1:-1:-1;;;27564:18:1;;;27557:44;27618:18;;12144:49:0::4;27304:338:1::0;12144:49:0::4;12206:12;12244:19;12282:8;;;;;;;;;-1:-1:-1::0;;;;;12282:8:0::4;-1:-1:-1::0;;;;;12282:16:0::4;;12299:3;12304:5;12311;12318:4;:16;;;12336:4;:10;;;12282:65;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::4;-1:-1:-1::0;;12282:65:0::4;::::0;::::4;;::::0;::::4;::::0;;;::::4;::::0;::::4;:::i;:::-;;;12278:345;;;;:::i;:::-;;;::::0;::::4;;;;;:::i;:::-;;;;;;;;12521:6:::0;-1:-1:-1;12278:345:0::4;;;;;;::::0;;;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;12601:6:0;-1:-1:-1;12278:345:0::4;;;12426:4:::0;;-1:-1:-1;12432:3:0;-1:-1:-1;12278:345:0::4;12673:3;-1:-1:-1::0;;;;;12642:82:0::4;12666:5;-1:-1:-1::0;;;;;12642:82:0::4;12653:4;:11;;;12642:82;12678:4;:16;;;12696:4;:10;;;12708:7;12717:6;12642:82;;;;;;;;;:::i;:::-;;;;;;;;12229:507;12752:7;12748:738;;;12776:21;::::0;;;:13:::4;:21;::::0;;;;:28;;-1:-1:-1;;12776:28:0::4;12800:4;12776:28;::::0;;12748:738:::4;;;-1:-1:-1::0;;;;;12826:23:0;::::4;12822:664;;12893:22;::::0;;;;::::4;::::0;;-1:-1:-1;;;;;12893:22:0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;-1:-1:-1;12866:24:0;;;:16:::4;:24:::0;;;;;;:49;;;;-1:-1:-1;;;;;;12866:49:0::4;::::0;::::4;::::0;;;::::4;::::0;;;;12893:22;;12866:24;-1:-1:-1;12866:49:0;::::4;::::0;::::4;::::0;;::::4;:::i;:::-;;;;;12976:3;-1:-1:-1::0;;;;;12935:82:0::4;12969:5;-1:-1:-1::0;;;;;12935:82:0::4;12956:4;:11;;;12935:82;12981:4;:16;;;12999:4;:10;;;13011:5;12935:82;;;;;;;;:::i;:::-;;;;;;;;12822:664;;;13146:5;:7:::0;;;:5:::4;:7;::::0;::::4;:::i;:::-;;;;;;13363:4;:16;;;13226:9;-1:-1:-1::0;;;;;13173:301:0::4;13202:5;-1:-1:-1::0;;;;;13173:301:0::4;;13277:25;;;13304:3;13309:5;13254:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1::0;;;;;13254:61:0::4;;;;;;;-1:-1:-1::0;;;;;13254:61:0::4;;;;;;;;;;;13342:1;13398::::0;13443:6:::4;13468:5;;13173:301;;;;;;;;;;:::i;:::-;;;;;;;;12822:664;-1:-1:-1::0;;8105:11:0;;;-1:-1:-1;8101:351:0::2;;8192:8;:16:::0;8133:17:::2;::::0;8178:30:::2;::::0;-1:-1:-1;;;8192:16:0;::::2;-1:-1:-1::0;;;;;8192:16:0::2;8178:11;:30;:::i;:::-;8164:9;8154:19;::::0;:7;:19:::2;:::i;:::-;8153:56;;;;:::i;:::-;-1:-1:-1::0;;;;;8241:22:0;::::2;8224:14;8241:22:::0;;;:15:::2;:22;::::0;;;;;8133:76;;-1:-1:-1;8286:18:0;;::::2;8278:47;;;::::0;-1:-1:-1;;;8278:47:0;;33077:2:1;8278:47:0::2;::::0;::::2;33059:21:1::0;33116:2;33096:18;;;33089:30;-1:-1:-1;;;33135:18:1;;;33128:46;33191:18;;8278:47:0::2;32875:340:1::0;8278:47:0::2;8365:18;8374:9:::0;8365:6;:18:::2;:::i;:::-;-1:-1:-1::0;;;;;8340:22:0;::::2;;::::0;;;:15:::2;:22;::::0;;;;:43;;;;8398:8:::2;:42:::0;;8430:9;;8340:22;8398:42:::2;::::0;8430:9;;-1:-1:-1;;;;;8398:42:0::2;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;8398:42:0::2;;;;;-1:-1:-1::0;;;;;8398:42:0::2;;;;;;8118:334;;8101:351;-1:-1:-1::0;;4929:1:0;4918:8;:12;-1:-1:-1;;;;;;11495:1998:0:o;13679:205::-;13827:48;;;;;;;33653:25:1;;;;-1:-1:-1;;;;;33714:32:1;;;;33694:18;;;33687:60;33763:18;;;33756:34;;;;33806:18;;;;33799:34;;;;13827:48:0;;;;;;;;;;33625:19:1;;;;13827:48:0;;13817:59;;;;;;13679:205::o;16865:139::-;7181:3;;-1:-1:-1;;;;;7181:3:0;7167:10;:17;7159:38;;;;-1:-1:-1;;;7159:38:0;;;;;;;:::i;:::-;16926:10:::1;:17:::0;;-1:-1:-1;;;;;;16926:17:0::1;-1:-1:-1::0;;;;;16926:17:0;;::::1;::::0;;::::1;::::0;;;16969:3:::1;::::0;16959:37:::1;::::0;16980:15:::1;6306:25:1::0;;16926:17:0;;16969:3:::1;::::0;16959:37:::1;::::0;6294:2:1;6279:18;16959:37:0::1;;;;;;;16865:139:::0;:::o;20593:516::-;-1:-1:-1;;;;;20690:22:0;;20667:20;20690:22;;;;;;;;;;20667:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20723:24;20750:9;20760:6;20750:17;;;;;;:::i;:::-;;;;;;;;;;;;;;20788:10;;20750:17;;-1:-1:-1;;;;;;20788:10:0;;;:21;;;;:46;;;;-1:-1:-1;;;;;;20813:21:0;;;;20788:46;20780:72;;;;-1:-1:-1;;;20780:72:0;;;;;;;:::i;:::-;20885:3;;-1:-1:-1;;;;;20885:3:0;20871:10;:17;;:50;;-1:-1:-1;20906:15:0;;;;-1:-1:-1;;;;;20906:15:0;20892:10;:29;20871:50;20863:69;;;;-1:-1:-1;;;20863:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20957:22:0;;:13;:22;;;;;;;;;;20951:36;;;;;:::i;:::-;:41;;-1:-1:-1;20943:71:0;;;;-1:-1:-1;;;20943:71:0;;34722:2:1;20943:71:0;;;34704:21:1;34761:2;34741:18;;;34734:30;-1:-1:-1;;;34780:18:1;;;34773:47;34837:18;;20943:71:0;34520:341:1;20943:71:0;21027:20;;-1:-1:-1;;;;;;21027:20:0;-1:-1:-1;;;;;21027:20:0;;;;;;;;21065:36;;;;;;;;;;21076:6;;21065:36;:::i;:::-;;;;;;;;20656:453;;20593:516;;:::o;26325:223::-;26468:7;26495:45;26508:6;;26495:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26516:10:0;;-1:-1:-1;26528:11:0;;-1:-1:-1;26495:12:0;;-1:-1:-1;26495:45:0:i;:::-;26488:52;26325:223;-1:-1:-1;;;;;26325:223:0:o;21148:404::-;-1:-1:-1;;;;;21256:19:0;;21233:20;21256:19;;;;;;;;;;21233:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21286:24;21313:9;21323:6;21313:17;;;;;;:::i;:::-;;;;;;;;;;;;;;21351:10;;21313:17;;-1:-1:-1;;;;;;21351:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;21373:18:0;;;;21351:40;21343:66;;;;-1:-1:-1;;;21343:66:0;;;;;;;:::i;:::-;21442:3;;-1:-1:-1;;;;;21442:3:0;21428:10;:17;;:50;;-1:-1:-1;21463:15:0;;;;-1:-1:-1;;;;;21463:15:0;21449:10;:29;21428:50;21420:69;;;;-1:-1:-1;;;21420:69:0;;;;;;;:::i;:::-;21502:42;21519:6;21527:10;21539:4;21502:16;:42::i;:::-;21222:330;;21148:404;;:::o;17814:190::-;7181:3;;-1:-1:-1;;;;;7181:3:0;7167:10;:17;7159:38;;;;-1:-1:-1;;;7159:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17885:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;17884:16;17876:25;;;::::0;::::1;;-1:-1:-1::0;;;;;17912:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;17912:22:0::1;17930:4;17912:22:::0;;::::1;::::0;;;17945:6:::1;:19:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;17945:19:0::1;::::0;::::1;::::0;;17980:16;;2325:51:1;;;17980:16:0::1;::::0;2298:18:1;17980:16:0::1;;;;;;;17814:190:::0;:::o;22918:148::-;22995:16;23031:19;23051:6;23031:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;23024:34;;;;;;;;;;;;;;;23031:27;23024:34;;;23031:27;23024:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23024:34:0;;;;;;;;;;;;;;;;;;;;;;;22918:148;;;:::o;15981:207::-;7311:10;7303:19;;;;:7;:19;;;;;;;;7295:42;;;;-1:-1:-1;;;7295:42:0;;;;;;;:::i;:::-;16078:9:::1;16073:108;16093:18:::0;;::::1;16073:108;;;16133:4;:17;16151:7:::0;;16159:1;16151:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;16163:5;16133:36;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16113:3;;;;;:::i;:::-;;;;16073:108;;13934:764:::0;14043:14;14060:48;14071:7;14080:5;14087:12;14101:6;14060:10;:48::i;:::-;14128:21;;;;:13;:21;;;;;;14043:65;;-1:-1:-1;14128:21:0;;14127:22;14119:49;;;;-1:-1:-1;;;14119:49:0;;27506:2:1;14119:49:0;;;27488:21:1;27545:2;27525:18;;;27518:30;-1:-1:-1;;;27564:18:1;;;27557:44;27618:18;;14119:49:0;27304:338:1;14119:49:0;14181:25;14209:24;;;:16;:24;;;;;14252:9;;-1:-1:-1;;;;;14252:9:0;14244:51;;;;-1:-1:-1;;;14244:51:0;;35928:2:1;14244:51:0;;;35910:21:1;35967:2;35947:18;;;35940:30;-1:-1:-1;;;35986:18:1;;;35979:45;36041:18;;14244:51:0;35726:339:1;14244:51:0;14322:9;;;14363:11;;14342:32;;-1:-1:-1;;;;;14322:9:0;;;;14308:11;;14363;14342:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14412:22:0;;-1:-1:-1;;;;;;14412:22:0;;;-1:-1:-1;;14445:16:0;;;;;;;;;14432:1;14445:16;;14342:32;;-1:-1:-1;;14412:22:0;14445:11;;;:16;;:11;:16;:::i;:::-;-1:-1:-1;14492:8:0;;:57;;-1:-1:-1;;;14492:57:0;;14475:12;;-1:-1:-1;;;;;14492:8:0;;:16;;:57;;14509:3;;14514:5;;14521;;14528:12;;14542:6;;14492:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14492:57:0;;;;;;;;;;;;:::i;:::-;14474:75;;;14568:7;14560:16;;;;;;14589:21;;;;:13;:21;;;;;;;:28;;-1:-1:-1;;14589:28:0;14613:4;14589:28;;;14633:57;-1:-1:-1;;;;;14633:57:0;;;14653:7;;14633:57;;;;14669:12;;14683:6;;8857:25:1;;;8913:2;8898:18;;8891:34;8845:2;8830:18;;8683:248;23944:460:0;7311:10;7303:19;;;;:7;:19;;;;;;;;7295:42;;;;-1:-1:-1;;;7295:42:0;;;;;;;:::i;:::-;24147:11;24184:26;;::::1;:59:::0;::::1;;;-1:-1:-1::0;24214:29:0;;::::1;24184:59;24176:68;;;::::0;::::1;;24262:9;24257:140;24281:6;24277:1;:10;24257:140;;;24342:43;;;;;;;;24355:9;;24365:1;24355:12;;;;;;;:::i;:::-;;;;;;;24342:43;;;;24369:12;;24382:1;24369:15;;;;;;;:::i;:::-;;;;;;;24342:43;;::::0;24309:14:::1;:30;24324:11;;24336:1;24324:14;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;24309:30:::0;;-1:-1:-1;24309:30:0;;::::1;::::0;;;;;;-1:-1:-1;24309:30:0;:76;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;24289:3;::::1;::::0;::::1;:::i;:::-;;;;24257:140;;;;24119:285;23944:460:::0;;;;;;:::o;3832:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3832:55:0;;-1:-1:-1;3832:55:0;;-1:-1:-1;3832:55:0:o;25317:672::-;7311:10;7303:19;;;;:7;:19;;;;;;;;7295:42;;;;-1:-1:-1;;;7295:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25541:19:0;::::1;25518:20;25541:19:::0;;;::::1;::::0;;;;;;25518:42;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25571:24;25598:9;25608:6;25598:17;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;25634:10;;25598:17;;-1:-1:-1;;;;;;25634:10:0;;::::1;:18:::0;;::::1;;:40:::0;::::1;;;-1:-1:-1::0;;;;;;25656:18:0;::::1;::::0;::::1;25634:40;25626:66;;;;-1:-1:-1::0;;;25626:66:0::1;;;;;;;:::i;:::-;25722:11:::0;25759:32;;::::1;25751:41;;;::::0;::::1;;25831:15;25805;25821:6;25805:23;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:41;25864:9:::1;25859:123;25883:6;25879:1;:10;25859:123;;;25952:15;;25968:1;25952:18;;;;;;;:::i;:::-;;;;;;;25911:14;25926:6;25911:22;;;;;;:::i;:::-;;;;;;;;;;;;;:38;25934:11;;25946:1;25934:14;;;;;;;:::i;:::-;;;;;;;25911:38;;;;;;;;;;;:59;;;;25891:3;;;;;:::i;:::-;;;;25859:123;;;;25507:482;;;25317:672:::0;;;;;;:::o;26024:266::-;-1:-1:-1;;;;;26200:19:0;;26157:7;26200:19;;;;;;;;;;26177:42;;26157:7;;26200:19;26177:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26237:45;26250:6;26258:10;26270:11;26237:12;:45::i;:::-;26230:52;;;26024:266;;;;;;:::o;15509:210::-;15575:8;:20;;-1:-1:-1;;15606:24:0;;;;;15659:3;;:25;;-1:-1:-1;;;;;15575:20:0;;;;15560:12;;-1:-1:-1;;;;;15659:3:0;;15575:20;;15659:25;24771:205:1;19698:719:0;-1:-1:-1;;;;;19886:19:0;;19863:20;19886:19;;;;;;;;;;19863:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19916:24;19943:9;19953:6;19943:17;;;;;;:::i;:::-;;;;;;;;;;;;;;19981:10;;19943:17;;-1:-1:-1;;;;;;19981:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;20003:18:0;;;;19981:40;19973:66;;;;-1:-1:-1;;;19973:66:0;;;;;;;:::i;:::-;20072:3;;-1:-1:-1;;;;;20072:3:0;20058:10;:17;;:50;;-1:-1:-1;20093:15:0;;;;-1:-1:-1;;;;;20093:15:0;20079:10;:29;20058:50;20050:69;;;;-1:-1:-1;;;20050:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20136:20:0;;;20132:77;;20173:15;;;:24;;-1:-1:-1;;;;;;20173:24:0;-1:-1:-1;;;;;20173:24:0;;;;;20132:77;20219:15;;;:24;;;20258:21;;20254:96;;20296:42;20313:6;20321:10;;20296:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20333:4:0;;-1:-1:-1;20296:16:0;;-1:-1:-1;;20296:42:0:i;:::-;20394:6;-1:-1:-1;;;;;20367:42:0;20388:4;-1:-1:-1;;;;;20367:42:0;;20380:6;20402;20367:42;;;;;;;:::i;:::-;;;;;;;;19852:565;;19698:719;;;;;:::o;24449:829::-;7311:10;7303:19;;;;:7;:19;;;;;;;;7295:42;;;;-1:-1:-1;;;7295:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24680:19:0;::::1;24657:20;24680:19:::0;;;::::1;::::0;;;;;;24657:42;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24710:24;24737:9;24747:6;24737:17;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;24775:10;;24737:17;;-1:-1:-1;;;;;;24775:10:0;;::::1;:18:::0;;::::1;;:40:::0;::::1;;;-1:-1:-1::0;;;;;;24797:18:0;::::1;::::0;::::1;24775:40;24767:66;;;;-1:-1:-1::0;;;24767:66:0::1;;;;;;;:::i;:::-;24859:15;::::0;;::::1;::::0;13600:18;;13599:33;24844:69:::1;;;::::0;-1:-1:-1;;;24844:69:0;;37923:2:1;24844:69:0::1;::::0;::::1;37905:21:1::0;37962:2;37942:18;;;37935:30;-1:-1:-1;;;37981:18:1;;;37974:42;38033:18;;24844:69:0::1;37721:336:1::0;24844:69:0::1;24943:11:::0;24980:26;;::::1;:59:::0;::::1;;;-1:-1:-1::0;25010:29:0;;::::1;24980:59;24972:68;;;::::0;::::1;;25053:49;25105:13;25119:6;25105:21;;;;;;:::i;:::-;;;;;;;;;;;;;25053:73;;25142:9;25137:134;25161:6;25157:1;:10;25137:134;;;25216:43;;;;;;;;25229:9;;25239:1;25229:12;;;;;;;:::i;:::-;;;;;;;25216:43;;;;25243:12;;25256:1;25243:15;;;;;;;:::i;:::-;;;;;;;25216:43;;::::0;25189:8:::1;:24;25198:11;;25210:1;25198:14;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;25189:24:::0;;-1:-1:-1;25189:24:0;;::::1;::::0;;;;;;-1:-1:-1;25189:24:0;:70;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;25169:3;::::1;::::0;::::1;:::i;:::-;;;;25137:134;;;;24646:632;;;;24449:829:::0;;;;;;;:::o;3591:47::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17039:200::-;17101:10;;-1:-1:-1;;;;;17101:10:0;17087;:24;17079:33;;;;;;17142:10;;17137:3;;17128:42;;17154:15;6306:25:1;;-1:-1:-1;;;;;17142:10:0;;;;17137:3;;;;17128:42;;6294:2:1;6279:18;17128:42:0;;;;;;;17187:10;;;17181:3;:16;;-1:-1:-1;;;;;;17181:16:0;;;-1:-1:-1;;;;;17187:10:0;;17181:16;;;;17208:23;;;17039:200::o;26596:376::-;26687:4;26704:16;26723:14;26738:6;26723:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:34;;;;;;;;;;-1:-1:-1;3243:3:0;13600:18;;;13599:33;26768:89;;26841:4;26834:11;;;;;26768:89;26878:15;26894:6;26878:23;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;3243:3:0;13600:18;;;13599:33;26919:45;26912:52;;;26596:376;;;;;:::o;9602:1429::-;4858:8;;4870:1;4858:13;4850:22;;;;;;4894:1;4883:8;:12;7450:6:::1;::::0;::::1;;7449:7;7441:26;;;::::0;-1:-1:-1;;;7441:26:0;;25507:2:1;7441:26:0::1;::::0;::::1;25489:21:1::0;25546:1;25526:18;;;25519:29;-1:-1:-1;;;25564:18:1;;;25557:36;25610:18;;7441:26:0::1;25305:329:1::0;7441:26:0::1;-1:-1:-1::0;;;;;9816:23:0;::::2;::::0;;:50:::2;;-1:-1:-1::0;;;;;;9843:23:0;::::2;9856:10;9843:23;9816:50;9808:77;;;::::0;-1:-1:-1;;;9808:77:0;;26190:2:1;9808:77:0::2;::::0;::::2;26172:21:1::0;26229:2;26209:18;;;26202:30;-1:-1:-1;;;26248:18:1;;;26241:44;26302:18;;9808:77:0::2;25988:338:1::0;9808:77:0::2;9933:10;9896:20;9919:25:::0;;;::::2;::::0;;;;;;9896:48;;::::2;::::0;::::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9966:12;9979:6;9966:20;;;;;;:::i;:::-;::::0;;;::::2;::::0;;;;;::::2;::::0;;;;::::2;;9965:21;9957:43;;;::::0;-1:-1:-1;;;9957:43:0;;26827:2:1;9957:43:0::2;::::0;::::2;26809:21:1::0;26866:1;26846:18;;;26839:29;-1:-1:-1;;;26884:18:1;;;26877:39;26933:18;;9957:43:0::2;26625:332:1::0;9957:43:0::2;10013:24;10040:33;10047:4;;3324:3;13600:18:::0;;;13599:33;;13501:139;10040:33:::2;10013:60;;10089:19;10084:115;;10133:16;10150:6;10133:24;;;;;;:::i;:::-;::::0;;;::::2;::::0;;::::2;::::0;;;;;;;;10158:10:::2;10133:36;::::0;;;;;;;;::::2;;10125:62;;;::::0;-1:-1:-1;;;10125:62:0;;27164:2:1;10125:62:0::2;::::0;::::2;27146:21:1::0;27203:2;27183:18;;;27176:30;-1:-1:-1;;;27222:18:1;;;27215:43;27275:18;;10125:62:0::2;26962:337:1::0;10125:62:0::2;10223:4;::::0;3370:8:::2;13600:18:::0;;;13599:33;10211:697:::2;;10256:24;10283:9;10293:6;10283:17;;;;;;:::i;:::-;;;;;;;;;;;;;10256:44;;10342:19;:47;;;;-1:-1:-1::0;10365:10:0;;-1:-1:-1;;;;;10365:10:0::2;:24:::0;10342:47:::2;10341:94;;;-1:-1:-1::0;10425:10:0;;-1:-1:-1;;;;;10425:10:0::2;10411;:24;10341:94;10315:169;;;;-1:-1:-1::0;;;10315:169:0::2;;;;;;;:::i;:::-;3089:3;13600:18:::0;;;13599:33;10505:67:::2;;;;-1:-1:-1::0;10548:10:0;;-1:-1:-1;;;;;10548:10:0::2;10562;10548:24;10505:67;10501:133;;;10603:6;:15;;;10593:25;;;;10501:133;3145:8;13600:18:::0;;;13599:33;10650:247:::2;;10710:12;10725:46;10738:6:::0;10746:10;10758:5;10725:12:::2;:46::i;:::-;10710:61;;10790:17;10802:4;10790:11;:17::i;:::-;10691:132;10650:247;;;10833:9;:13:::0;10829:68:::2;;10867:14;10879:1;10867:11;:14::i;:::-;10241:667;10211:697;10920:5;:7:::0;;;:5:::2;:7;::::0;::::2;:::i;:::-;;;;;;10989:10;10966:3;-1:-1:-1::0;;;;;10943:80:0::2;10954:10;-1:-1:-1::0;;;;;10943:80:0::2;;10971:5;;10978:9;11001:6;11009;11017:5;;10943:80;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;4929:1:0;4918:8;:12;-1:-1:-1;;;;;;9602:1429:0:o;15762:167::-;7311:10;7303:19;;;;:7;:19;;;;;;;;7295:42;;;;-1:-1:-1;;;7295:42:0;;;;;;;:::i;:::-;15873:5:::1;15850:12;15863:6;;15850:20;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:28;;;::::1;;-1:-1:-1::0;;15850:28:0;;::::1;::::0;;;::::1;::::0;;;15894:27:::1;::::0;::::1;::::0;15907:6;;;;15915:5;;15894:27:::1;:::i;:::-;;;;;;;;15762:167:::0;;;:::o;23147:751::-;23219:48;23270:16;23287:6;23270:24;;;;;;:::i;:::-;;;;;;;;;;;;;23219:75;;23305:34;23342:19;23362:6;23342:27;;;;;;:::i;:::-;;;;;;;;;;;;;;23401:23;;23342:27;;-1:-1:-1;23401:23:0;23380:18;;23498:286;23522:8;23518:1;:12;23498:286;;;23556:16;23573:1;23556:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23556:19:0;23594:21;;;;;;;;;;;;23556:19;;-1:-1:-1;23594:21:0;;23590:183;;;23636:3;;;;:::i;:::-;;;;23498:286;;23590:183;23680:10;;;;:::i;:::-;;;;23731:16;23748:8;23731:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23731:26:0;23709:16;23726:1;23709:19;;;;;;;;:::i;:::-;;;;;;;;;:48;;;;;-1:-1:-1;;;;;23709:48:0;;;;;-1:-1:-1;;;;;23709:48:0;;;;;;23498:286;;;-1:-1:-1;23811:8:0;23794:97;23825:10;23821:1;:14;23794:97;;;23857:16;:22;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;23857:22:0;;;;;-1:-1:-1;;;;;;23857:22:0;;;;;;23837:3;;;;:::i;:::-;;;;23794:97;;;;23208:690;;;;;23147:751;:::o;16747:82::-;7311:10;7303:19;;;;:7;:19;;;;;;;;7295:42;;;;-1:-1:-1;;;7295:42:0;;;;;;;:::i;:::-;16809:4:::1;:12:::0;16747:82::o;21594:408::-;-1:-1:-1;;;;;21705:19:0;;21682:20;21705:19;;;;;;;;;;21682:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21735:24;21762:9;21772:6;21762:17;;;;;;:::i;:::-;;;;;;;;;;;;;;21800:10;;21762:17;;-1:-1:-1;;;;;;21800:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;21822:18:0;;;;21800:40;21792:66;;;;-1:-1:-1;;;21792:66:0;;;;;;;:::i;:::-;21891:3;;-1:-1:-1;;;;;21891:3:0;21877:10;:17;;:50;;-1:-1:-1;21912:15:0;;;;-1:-1:-1;;;;;21912:15:0;21898:10;:29;21877:50;21869:69;;;;-1:-1:-1;;;21869:69:0;;;;;;;:::i;:::-;21951:43;21968:6;21976:10;21988:5;21951:16;:43::i;18503:97::-;18550:16;18586:6;18579:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18579:13:0;;;;;;;;;;;;;;;;;;;;;;;18503:97;:::o;14865:153::-;-1:-1:-1;;;;;14928:25:0;;;;;;:15;:25;;;;;:38;;14957:9;;14928:25;:38;;14957:9;;14928:38;:::i;:::-;;;;-1:-1:-1;;14982:28:0;;15000:9;6306:25:1;;-1:-1:-1;;;;;14982:28:0;;;;;6294:2:1;6279:18;14982:28:0;;;;;;;14865:153;:::o;22718:149::-;22798:7;22825:19;22845:6;22825:27;;;;;;:::i;:::-;;;;;;;;;;;;;;:34;;22718:149;-1:-1:-1;;22718:149:0:o;22010:654::-;22119:42;22164:16;22181:6;22164:24;;;;;;:::i;:::-;;;;;;;;;;;;;22119:69;;22199:34;22236:19;22256:6;22236:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;22274:12:0;;22297:360;22321:10;:17;22317:1;:21;22297:360;;;22367:10;22378:1;22367:13;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;22399:15:0;;;;;;;;;;;;;;;22367:13;;-1:-1:-1;22399:15:0;;:24;;;;;22395:73;22444:8;22395:73;22486:5;22482:73;;;22512:27;;;;;;;-1:-1:-1;22512:27:0;;;;;;;;;-1:-1:-1;;;;;;22512:27:0;-1:-1:-1;;;;;22512:27:0;;;;;22482:73;-1:-1:-1;;;;;22569:15:0;;;;;;;;;;;;;;;:23;;-1:-1:-1;;22569:23:0;;;;;;;22612:33;;;;;22625:6;;22569:23;;22612:33;:::i;:::-;;;;;;;;22297:360;22340:3;;;;:::i;:::-;;;;22297:360;;26980:961;27122:7;27142:30;27175:13;27189:6;27175:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:33;;;;;;;;;;27142:66;;;;;;;;;;;;;;;;;;;;;;27175:21;-1:-1:-1;27142:66:0;27342:38;27361:6;27175:33;27342:18;:38::i;:::-;27338:127;;;27421:32;27435:18;27421:11;:32;:::i;:::-;27404:49;;:14;:49;:::i;:::-;27397:56;;;;;;;27338:127;27477:31;27511:26;;;:14;:26;;;;;;;;27477:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27691:32;;;27690:69;;27744:15;27690:69;;;27727:14;27690:69;27671:88;;27770:19;27814;27793:18;:40;27792:85;;27858:19;27792:85;;;27837:18;27792:85;27770:107;-1:-1:-1;27908:25:0;27770:107;27908:11;:25;:::i;:::-;27897:36;;:8;:36;:::i;:::-;27890:43;26980:961;-1:-1:-1;;;;;;;;;;;;26980:961:0:o;8619:426::-;8695:4;8682:9;:17;;8674:47;;;;-1:-1:-1;;;8674:47:0;;39364:2:1;8674:47:0;;;39346:21:1;39403:2;39383:18;;;39376:30;-1:-1:-1;;;39422:18:1;;;39415:47;39479:18;;8674:47:0;39162:341:1;8674:47:0;8736:8;;8732:127;;8791:3;;:25;;8774:12;;-1:-1:-1;;;;;8791:3:0;;8807:4;;8774:12;8791:25;8774:12;8791:25;8807:4;8791:3;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8773:43;;;8839:7;8831:16;;;;;;8746:113;8732:127;8885:4;8873:9;:16;8869:169;;;8934:12;8951:10;8974:16;8986:4;8974:9;:16;:::i;:::-;8951:44;;;24771:205:1;8869:169:0;8619:426;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:225;232:4;224:6;220:17;303:6;291:10;288:22;-1:-1:-1;;;;;255:10:1;252:34;249:62;246:88;;;314:18;;:::i;:::-;350:2;343:22;-1:-1:-1;146:225:1:o;376:249::-;486:2;467:13;;-1:-1:-1;;463:27:1;451:40;;-1:-1:-1;;;;;506:34:1;;542:22;;;503:62;500:88;;;568:18;;:::i;:::-;604:2;597:22;-1:-1:-1;;376:249:1:o;630:187::-;679:4;-1:-1:-1;;;;;704:6:1;701:30;698:56;;;734:18;;:::i;:::-;-1:-1:-1;800:2:1;779:15;-1:-1:-1;;775:29:1;806:4;771:40;;630:187::o;822:421::-;887:5;917:36;946:6;917:36;:::i;:::-;982:2;976:9;994:31;1022:2;1014:6;994:31;:::i;:::-;1043:6;1034:15;;1073:6;1065;1058:22;1113:3;1104:6;1099:3;1095:16;1092:25;1089:45;;;1130:1;1127;1120:12;1089:45;1180:6;1175:3;1168:4;1160:6;1156:17;1143:44;1235:1;1228:4;1219:6;1211;1207:19;1203:30;1196:41;;;822:421;;;;;:::o;1248:222::-;1291:5;1344:3;1337:4;1329:6;1325:17;1321:27;1311:55;;1362:1;1359;1352:12;1311:55;1384:80;1460:3;1451:6;1438:20;1431:4;1423:6;1419:17;1384:80;:::i;1475:322::-;1544:6;1597:2;1585:9;1576:7;1572:23;1568:32;1565:52;;;1613:1;1610;1603:12;1565:52;1653:9;1640:23;-1:-1:-1;;;;;1678:6:1;1675:30;1672:50;;;1718:1;1715;1708:12;1672:50;1741;1783:7;1774:6;1763:9;1759:22;1741:50;:::i;1994:180::-;2053:6;2106:2;2094:9;2085:7;2081:23;2077:32;2074:52;;;2122:1;2119;2112:12;2074:52;-1:-1:-1;2145:23:1;;1994:180;-1:-1:-1;1994:180:1:o;2387:118::-;2473:5;2466:13;2459:21;2452:5;2449:32;2439:60;;2495:1;2492;2485:12;2510:241;2566:6;2619:2;2607:9;2598:7;2594:23;2590:32;2587:52;;;2635:1;2632;2625:12;2587:52;2674:9;2661:23;2693:28;2715:5;2693:28;:::i;2756:173::-;2824:20;;-1:-1:-1;;;;;2873:31:1;;2863:42;;2853:70;;2919:1;2916;2909:12;2853:70;2756:173;;;:::o;2934:186::-;2993:6;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;3085:29;3104:9;3085:29;:::i;3310:250::-;3395:1;3405:113;3419:6;3416:1;3413:13;3405:113;;;3495:11;;;3489:18;3476:11;;;3469:39;3441:2;3434:10;3405:113;;;-1:-1:-1;;3552:1:1;3534:16;;3527:27;3310:250::o;3565:270::-;3606:3;3644:5;3638:12;3671:6;3666:3;3659:19;3687:76;3756:6;3749:4;3744:3;3740:14;3733:4;3726:5;3722:16;3687:76;:::i;:::-;3817:2;3796:15;-1:-1:-1;;3792:29:1;3783:39;;;;3824:4;3779:50;;3565:270;-1:-1:-1;;3565:270:1:o;3840:314::-;-1:-1:-1;;;;;4015:32:1;;3997:51;;4084:2;4079;4064:18;;4057:30;;;-1:-1:-1;;4104:44:1;;4129:18;;4121:6;4104:44;:::i;:::-;4096:52;3840:314;-1:-1:-1;;;;3840:314:1:o;4159:348::-;4211:8;4221:6;4275:3;4268:4;4260:6;4256:17;4252:27;4242:55;;4293:1;4290;4283:12;4242:55;-1:-1:-1;4316:20:1;;-1:-1:-1;;;;;4348:30:1;;4345:50;;;4391:1;4388;4381:12;4345:50;4428:4;4420:6;4416:17;4404:29;;4480:3;4473:4;4464:6;4456;4452:19;4448:30;4445:39;4442:59;;;4497:1;4494;4487:12;4442:59;4159:348;;;;;:::o;4512:367::-;4575:8;4585:6;4639:3;4632:4;4624:6;4620:17;4616:27;4606:55;;4657:1;4654;4647:12;4606:55;-1:-1:-1;4680:20:1;;-1:-1:-1;;;;;4712:30:1;;4709:50;;;4755:1;4752;4745:12;4709:50;4792:4;4784:6;4780:17;4768:29;;4852:3;4845:4;4835:6;4832:1;4828:14;4820:6;4816:27;4812:38;4809:47;4806:67;;;4869:1;4866;4859:12;4884:965;5018:6;5026;5034;5042;5050;5058;5066;5119:3;5107:9;5098:7;5094:23;5090:33;5087:53;;;5136:1;5133;5126:12;5087:53;5176:9;5163:23;-1:-1:-1;;;;;5246:2:1;5238:6;5235:14;5232:34;;;5262:1;5259;5252:12;5232:34;5301:59;5352:7;5343:6;5332:9;5328:22;5301:59;:::i;:::-;5379:8;;-1:-1:-1;5275:85:1;-1:-1:-1;5275:85:1;;-1:-1:-1;5433:38:1;5467:2;5452:18;;5433:38;:::i;:::-;5423:48;;5490:38;5524:2;5513:9;5509:18;5490:38;:::i;:::-;5480:48;;5575:2;5564:9;5560:18;5547:32;5537:42;;5632:3;5621:9;5617:19;5604:33;5588:49;;5662:2;5652:8;5649:16;5646:36;;;5678:1;5675;5668:12;5646:36;;5717:72;5781:7;5770:8;5759:9;5755:24;5717:72;:::i;:::-;4884:965;;;;-1:-1:-1;4884:965:1;;-1:-1:-1;4884:965:1;;;;5691:98;;-1:-1:-1;;;4884:965:1:o;5854:301::-;5913:6;5966:2;5954:9;5945:7;5941:23;5937:32;5934:52;;;5982:1;5979;5972:12;5934:52;6021:9;6008:23;-1:-1:-1;;;;;6064:5:1;6060:46;6053:5;6050:57;6040:85;;6121:1;6118;6111:12;6722:1378;6867:6;6875;6883;6891;6899;6943:9;6934:7;6930:23;6973:3;6969:2;6965:12;6962:32;;;6990:1;6987;6980:12;6962:32;7013:29;7032:9;7013:29;:::i;:::-;7003:39;;7093:2;7082:9;7078:18;7065:32;-1:-1:-1;;;;;7157:2:1;7149:6;7146:14;7143:34;;;7173:1;7170;7163:12;7143:34;7211:6;7200:9;7196:22;7186:32;;7256:7;7249:4;7245:2;7241:13;7237:27;7227:55;;7278:1;7275;7268:12;7227:55;7301:74;7367:7;7362:2;7349:16;7344:2;7340;7336:11;7301:74;:::i;:::-;7291:84;;7394:38;7428:2;7417:9;7413:18;7394:38;:::i;:::-;7384:48;;7485:2;7474:9;7470:18;7457:32;7441:48;;7514:2;7504:8;7501:16;7498:36;;;7530:1;7527;7520:12;7498:36;;7553:52;7597:7;7586:8;7575:9;7571:24;7553:52;:::i;:::-;7543:62;-1:-1:-1;;7640:4:1;-1:-1:-1;;7621:17:1;;7617:28;7614:48;;;7658:1;7655;7648:12;7614:48;;7691:2;7685:9;7703:32;7728:6;7703:32;:::i;:::-;7787:3;7776:9;7772:19;7759:33;7751:6;7744:49;7826:40;7860:4;7849:9;7845:20;7826:40;:::i;:::-;7821:2;7809:15;;7802:65;7928:3;7913:19;;7900:33;7895:2;7883:15;;7876:58;7995:3;7980:19;;7967:33;7962:2;7950:15;;7943:58;8063:3;8048:19;;;8035:33;8029:3;8017:16;;8010:59;-1:-1:-1;6722:1378:1;;;;-1:-1:-1;6722:1378:1;7813:6;6722:1378::o;8105:391::-;8191:6;8199;8207;8215;8268:3;8256:9;8247:7;8243:23;8239:33;8236:53;;;8285:1;8282;8275:12;8236:53;8321:9;8308:23;8298:33;;8350:38;8384:2;8373:9;8369:18;8350:38;:::i;:::-;8105:391;;8340:48;;-1:-1:-1;;;;8435:2:1;8420:18;;8407:32;;8486:2;8471:18;8458:32;;8105:391::o;8936:260::-;9004:6;9012;9065:2;9053:9;9044:7;9040:23;9036:32;9033:52;;;9081:1;9078;9071:12;9033:52;9104:29;9123:9;9104:29;:::i;:::-;9094:39;;9152:38;9186:2;9175:9;9171:18;9152:38;:::i;:::-;9142:48;;8936:260;;;;;:::o;9201:547::-;9290:6;9298;9306;9314;9367:2;9355:9;9346:7;9342:23;9338:32;9335:52;;;9383:1;9380;9373:12;9335:52;9423:9;9410:23;-1:-1:-1;;;;;9448:6:1;9445:30;9442:50;;;9488:1;9485;9478:12;9442:50;9527:59;9578:7;9569:6;9558:9;9554:22;9527:59;:::i;:::-;9605:8;;9501:85;;-1:-1:-1;9687:2:1;9672:18;;9659:32;;9738:2;9723:18;9710:32;;-1:-1:-1;9201:547:1;-1:-1:-1;;;;9201:547:1:o;9976:390::-;10054:6;10062;10115:2;10103:9;10094:7;10090:23;10086:32;10083:52;;;10131:1;10128;10121:12;10083:52;10171:9;10158:23;-1:-1:-1;;;;;10196:6:1;10193:30;10190:50;;;10236:1;10233;10226:12;10190:50;10259;10301:7;10292:6;10281:9;10277:22;10259:50;:::i;:::-;10249:60;10356:2;10341:18;;;;10328:32;;-1:-1:-1;;;;9976:390:1:o;10371:1067::-;10464:6;10472;10525:2;10513:9;10504:7;10500:23;10496:32;10493:52;;;10541:1;10538;10531:12;10493:52;10564:29;10583:9;10564:29;:::i;:::-;10554:39;;10612:2;10665;10654:9;10650:18;10637:32;-1:-1:-1;;;;;10729:2:1;10721:6;10718:14;10715:34;;;10745:1;10742;10735:12;10715:34;10783:6;10772:9;10768:22;10758:32;;10828:7;10821:4;10817:2;10813:13;10809:27;10799:55;;10850:1;10847;10840:12;10799:55;10886:2;10873:16;10908:2;10904;10901:10;10898:36;;;10914:18;;:::i;:::-;10960:2;10957:1;10953:10;10943:20;;10992:2;10986:9;11004:40;11040:2;11036;11032:11;11024:6;11004:40;:::i;:::-;11079:18;;;11155:11;;;11151:20;;;11113:15;;;11183:19;;;11180:39;;;11215:1;11212;11205:12;11180:39;11239:11;;;;11259:148;11275:6;11270:3;11267:15;11259:148;;;11341:23;11360:3;11341:23;:::i;:::-;11329:36;;11292:12;;;;11385;;11259:148;;;11263:3;11426:6;11416:16;;;;;;;10371:1067;;;;;:::o;11443:658::-;11614:2;11666:21;;;11736:13;;11639:18;;;11758:22;;;11585:4;;11614:2;11837:15;;;;11811:2;11796:18;;;11585:4;11880:195;11894:6;11891:1;11888:13;11880:195;;;11959:13;;-1:-1:-1;;;;;11955:39:1;11943:52;;12050:15;;;;12015:12;;;;11991:1;11909:9;11880:195;;;-1:-1:-1;12092:3:1;;11443:658;-1:-1:-1;;;;;;11443:658:1:o;12106:578::-;12210:6;12218;12226;12279:2;12267:9;12258:7;12254:23;12250:32;12247:52;;;12295:1;12292;12285:12;12247:52;12335:9;12322:23;-1:-1:-1;;;;;12360:6:1;12357:30;12354:50;;;12400:1;12397;12390:12;12354:50;12439:70;12501:7;12492:6;12481:9;12477:22;12439:70;:::i;:::-;12528:8;;-1:-1:-1;12413:96:1;-1:-1:-1;;12613:2:1;12598:18;;12585:32;12626:28;12585:32;12626:28;:::i;:::-;12673:5;12663:15;;;12106:578;;;;;:::o;12689:1088::-;12847:6;12855;12863;12871;12879;12887;12940:2;12928:9;12919:7;12915:23;12911:32;12908:52;;;12956:1;12953;12946:12;12908:52;12996:9;12983:23;-1:-1:-1;;;;;13066:2:1;13058:6;13055:14;13052:34;;;13082:1;13079;13072:12;13052:34;13121:70;13183:7;13174:6;13163:9;13159:22;13121:70;:::i;:::-;13210:8;;-1:-1:-1;13095:96:1;-1:-1:-1;13298:2:1;13283:18;;13270:32;;-1:-1:-1;13314:16:1;;;13311:36;;;13343:1;13340;13333:12;13311:36;13382:72;13446:7;13435:8;13424:9;13420:24;13382:72;:::i;:::-;13473:8;;-1:-1:-1;13356:98:1;-1:-1:-1;13561:2:1;13546:18;;13533:32;;-1:-1:-1;13577:16:1;;;13574:36;;;13606:1;13603;13596:12;13574:36;;13645:72;13709:7;13698:8;13687:9;13683:24;13645:72;:::i;:::-;12689:1088;;;;-1:-1:-1;12689:1088:1;;-1:-1:-1;12689:1088:1;;13736:8;;12689:1088;-1:-1:-1;;;12689:1088:1:o;13782:916::-;13922:6;13930;13938;13946;13954;13962;14015:3;14003:9;13994:7;13990:23;13986:33;13983:53;;;14032:1;14029;14022:12;13983:53;14055:29;14074:9;14055:29;:::i;:::-;14045:39;;14131:2;14120:9;14116:18;14103:32;14093:42;;14186:2;14175:9;14171:18;14158:32;-1:-1:-1;;;;;14250:2:1;14242:6;14239:14;14236:34;;;14266:1;14263;14256:12;14236:34;14305:70;14367:7;14358:6;14347:9;14343:22;14305:70;:::i;:::-;14394:8;;-1:-1:-1;14279:96:1;-1:-1:-1;14482:2:1;14467:18;;14454:32;;-1:-1:-1;14498:16:1;;;14495:36;;;14527:1;14524;14517:12;14703:396;14781:6;14789;14842:2;14830:9;14821:7;14817:23;14813:32;14810:52;;;14858:1;14855;14848:12;14810:52;14898:9;14885:23;-1:-1:-1;;;;;14923:6:1;14920:30;14917:50;;;14963:1;14960;14953:12;14917:50;14986;15028:7;15019:6;15008:9;15004:22;14986:50;:::i;:::-;14976:60;;;15055:38;15089:2;15078:9;15074:18;15055:38;:::i;15104:322::-;15181:6;15189;15197;15250:2;15238:9;15229:7;15225:23;15221:32;15218:52;;;15266:1;15263;15256:12;15218:52;15289:29;15308:9;15289:29;:::i;:::-;15279:39;15365:2;15350:18;;15337:32;;-1:-1:-1;15416:2:1;15401:18;;;15388:32;;15104:322;-1:-1:-1;;;15104:322:1:o;15431:654::-;15544:6;15552;15560;15568;15576;15629:3;15617:9;15608:7;15604:23;15600:33;15597:53;;;15646:1;15643;15636:12;15597:53;15669:29;15688:9;15669:29;:::i;:::-;15659:39;;15717:38;15751:2;15740:9;15736:18;15717:38;:::i;:::-;15707:48;;15802:2;15791:9;15787:18;15774:32;15764:42;;15857:2;15846:9;15842:18;15829:32;-1:-1:-1;;;;;15876:6:1;15873:30;15870:50;;;15916:1;15913;15906:12;15870:50;15955:70;16017:7;16008:6;15997:9;15993:22;15955:70;:::i;:::-;15431:654;;;;-1:-1:-1;15431:654:1;;-1:-1:-1;16044:8:1;;15929:96;15431:654;-1:-1:-1;;;15431:654:1:o;16090:1163::-;16257:6;16265;16273;16281;16289;16297;16305;16358:3;16346:9;16337:7;16333:23;16329:33;16326:53;;;16375:1;16372;16365:12;16326:53;16398:29;16417:9;16398:29;:::i;:::-;16388:39;;16478:2;16467:9;16463:18;16450:32;-1:-1:-1;;;;;16542:2:1;16534:6;16531:14;16528:34;;;16558:1;16555;16548:12;16528:34;16597:70;16659:7;16650:6;16639:9;16635:22;16597:70;:::i;:::-;16686:8;;-1:-1:-1;16571:96:1;-1:-1:-1;16774:2:1;16759:18;;16746:32;;-1:-1:-1;16790:16:1;;;16787:36;;;16819:1;16816;16809:12;16787:36;16858:72;16922:7;16911:8;16900:9;16896:24;16858:72;:::i;:::-;16949:8;;-1:-1:-1;16832:98:1;-1:-1:-1;17037:2:1;17022:18;;17009:32;;-1:-1:-1;17053:16:1;;;17050:36;;;17082:1;17079;17072:12;17258:219;17407:2;17396:9;17389:21;17370:4;17427:44;17467:2;17456:9;17452:18;17444:6;17427:44;:::i;17482:696::-;17588:6;17596;17604;17612;17620;17628;17681:3;17669:9;17660:7;17656:23;17652:33;17649:53;;;17698:1;17695;17688:12;17649:53;17721:29;17740:9;17721:29;:::i;:::-;17711:39;;17801:2;17790:9;17786:18;17773:32;-1:-1:-1;;;;;17820:6:1;17817:30;17814:50;;;17860:1;17857;17850:12;17814:50;17899:59;17950:7;17941:6;17930:9;17926:22;17899:59;:::i;:::-;17977:8;;-1:-1:-1;17873:85:1;-1:-1:-1;18031:38:1;;-1:-1:-1;18065:2:1;18050:18;;18031:38;:::i;:::-;18021:48;;18116:2;18105:9;18101:18;18088:32;18078:42;;18167:3;18156:9;18152:19;18139:33;18129:43;;17482:696;;;;;;;;:::o;18183:540::-;18260:6;18268;18276;18329:2;18317:9;18308:7;18304:23;18300:32;18297:52;;;18345:1;18342;18335:12;18297:52;18385:9;18372:23;-1:-1:-1;;;;;18410:6:1;18407:30;18404:50;;;18450:1;18447;18440:12;18404:50;18489:59;18540:7;18531:6;18520:9;18516:22;18489:59;:::i;18959:334::-;19161:2;19143:21;;;19200:2;19180:18;;;19173:30;-1:-1:-1;;;19234:2:1;19219:18;;19212:40;19284:2;19269:18;;18959:334::o;19298:331::-;19500:2;19482:21;;;19539:1;19519:18;;;19512:29;-1:-1:-1;;;19572:2:1;19557:18;;19550:38;19620:2;19605:18;;19298:331::o;19634:127::-;19695:10;19690:3;19686:20;19683:1;19676:31;19726:4;19723:1;19716:15;19750:4;19747:1;19740:15;19766:128;19833:9;;;19854:11;;;19851:37;;;19868:18;;:::i;19899:127::-;19960:10;19955:3;19951:20;19948:1;19941:31;19991:4;19988:1;19981:15;20015:4;20012:1;20005:15;20031:135;20070:3;20091:17;;;20088:43;;20111:18;;:::i;:::-;-1:-1:-1;20158:1:1;20147:13;;20031:135::o;20171:127::-;20232:10;20227:3;20223:20;20220:1;20213:31;20263:4;20260:1;20253:15;20287:4;20284:1;20277:15;20303:380;20382:1;20378:12;;;;20425;;;20446:61;;20500:4;20492:6;20488:17;20478:27;;20446:61;20553:2;20545:6;20542:14;20522:18;20519:38;20516:161;;20599:10;20594:3;20590:20;20587:1;20580:31;20634:4;20631:1;20624:15;20662:4;20659:1;20652:15;20516:161;;20303:380;;;:::o;21373:273::-;21558:6;21550;21545:3;21532:33;21514:3;21584:16;;21609:13;;;21584:16;21373:273;-1:-1:-1;21373:273:1:o;22114:545::-;22216:2;22211:3;22208:11;22205:448;;;22252:1;22277:5;22273:2;22266:17;22322:4;22318:2;22308:19;22392:2;22380:10;22376:19;22373:1;22369:27;22363:4;22359:38;22428:4;22416:10;22413:20;22410:47;;;-1:-1:-1;22451:4:1;22410:47;22506:2;22501:3;22497:12;22494:1;22490:20;22484:4;22480:31;22470:41;;22561:82;22579:2;22572:5;22569:13;22561:82;;;22624:17;;;22605:1;22594:13;22561:82;;;22565:3;;;22205:448;22114:545;;;:::o;22835:1206::-;-1:-1:-1;;;;;22954:3:1;22951:27;22948:53;;;22981:18;;:::i;:::-;23010:94;23100:3;23060:38;23092:4;23086:11;23060:38;:::i;:::-;23054:4;23010:94;:::i;:::-;23130:1;23155:2;23150:3;23147:11;23172:1;23167:616;;;;23827:1;23844:3;23841:93;;;-1:-1:-1;23900:19:1;;;23887:33;23841:93;-1:-1:-1;;22792:1:1;22788:11;;;22784:24;22780:29;22770:40;22816:1;22812:11;;;22767:57;23947:78;;23140:895;;23167:616;22061:1;22054:14;;;22098:4;22085:18;;-1:-1:-1;;23203:17:1;;;23304:9;23326:229;23340:7;23337:1;23334:14;23326:229;;;23429:19;;;23416:33;23401:49;;23536:4;23521:20;;;;23489:1;23477:14;;;;23356:12;23326:229;;;23330:3;23583;23574:7;23571:16;23568:159;;;23707:1;23703:6;23697:3;23691;23688:1;23684:11;23680:21;23676:34;23672:39;23659:9;23654:3;23650:19;23637:33;23633:79;23625:6;23618:95;23568:159;;;23770:1;23764:3;23761:1;23757:11;23753:19;23747:4;23740:33;23140:895;;;22835:1206;;;:::o;24046:125::-;24111:9;;;24132:10;;;24129:36;;;24145:18;;:::i;24176:267::-;24265:6;24260:3;24253:19;24317:6;24310:5;24303:4;24298:3;24294:14;24281:43;-1:-1:-1;24369:1:1;24344:16;;;24362:4;24340:27;;;24333:38;;;;24425:2;24404:15;;;-1:-1:-1;;24400:29:1;24391:39;;;24387:50;;24176:267::o;24448:318::-;24635:2;24624:9;24617:21;24598:4;24655:62;24713:2;24702:9;24698:18;24690:6;24682;24655:62;:::i;:::-;24647:70;;24753:6;24748:2;24737:9;24733:18;24726:34;24448:318;;;;;;:::o;26331:289::-;26462:3;26500:6;26494:13;26516:66;26575:6;26570:3;26563:4;26555:6;26551:17;26516:66;:::i;:::-;26598:16;;;;;26331:289;-1:-1:-1;;26331:289:1:o;27647:560::-;27869:4;27915:1;27911;27906:3;27902:11;27898:19;27956:2;27948:6;27944:15;27933:9;27926:34;27996:3;27991:2;27980:9;27976:18;27969:31;28017:45;28057:3;28046:9;28042:19;28034:6;28017:45;:::i;:::-;28098:15;;28093:2;28078:18;;28071:43;-1:-1:-1;28145:2:1;28130:18;;28123:34;;;;28188:3;28173:19;;;28166:35;28009:53;27647:560;-1:-1:-1;;27647:560:1:o;28212:825::-;28297:6;28305;28358:2;28346:9;28337:7;28333:23;28329:32;28326:52;;;28374:1;28371;28364:12;28326:52;28406:9;28400:16;28425:28;28447:5;28425:28;:::i;:::-;28521:2;28506:18;;28500:25;28472:5;;-1:-1:-1;;;;;;28537:30:1;;28534:50;;;28580:1;28577;28570:12;28534:50;28603:22;;28656:4;28648:13;;28644:27;-1:-1:-1;28634:55:1;;28685:1;28682;28675:12;28634:55;28714:2;28708:9;28736:32;28765:2;28736:32;:::i;:::-;28797:2;28791:9;28809:31;28837:2;28829:6;28809:31;:::i;:::-;28864:2;28856:6;28849:18;28904:7;28899:2;28894;28890;28886:11;28882:20;28879:33;28876:53;;;28925:1;28922;28915:12;28876:53;28938:68;29003:2;28998;28990:6;28986:15;28981:2;28977;28973:11;28938:68;:::i;:::-;29025:6;29015:16;;;;;;28212:825;;;;;:::o;29042:179::-;29077:3;29119:1;29101:16;29098:23;29095:120;;;29165:1;29162;29159;29144:23;-1:-1:-1;29202:1:1;29196:8;29191:3;29187:18;29095:120;29042:179;:::o;29226:671::-;29265:3;29307:4;29289:16;29286:26;29283:39;;;29226:671;:::o;29283:39::-;29349:2;29343:9;-1:-1:-1;;29414:16:1;29410:25;;29407:1;29343:9;29386:50;29465:4;29459:11;29489:16;-1:-1:-1;;;;;29595:2:1;29588:4;29580:6;29576:17;29573:25;29568:2;29560:6;29557:14;29554:45;29551:58;;;29602:5;;;;;29226:671;:::o;29551:58::-;29639:6;29633:4;29629:17;29618:28;;29675:3;29669:10;29702:2;29694:6;29691:14;29688:27;;;29708:5;;;;;;29226:671;:::o;29688:27::-;29792:2;29773:16;29767:4;29763:27;29759:36;29752:4;29743:6;29738:3;29734:16;29730:27;29727:69;29724:82;;;29799:5;;;;;;29226:671;:::o;29724:82::-;29815:57;29866:4;29857:6;29849;29845:19;29841:30;29835:4;29815:57;:::i;:::-;-1:-1:-1;29888:3:1;;29226:671;-1:-1:-1;;;;;29226:671:1:o;29902:442::-;30127:6;30116:9;30109:25;30170:6;30165:2;30154:9;30150:18;30143:34;30227:6;30220:14;30213:22;30208:2;30197:9;30193:18;30186:50;30272:3;30267:2;30256:9;30252:18;30245:31;30090:4;30293:45;30333:3;30322:9;30318:19;30310:6;30293:45;:::i;:::-;30285:53;29902:442;-1:-1:-1;;;;;;29902:442:1:o;30349:1350::-;30473:3;30467:10;-1:-1:-1;;;;;30492:6:1;30489:30;30486:56;;;30522:18;;:::i;:::-;30551:97;30641:6;30601:38;30633:4;30627:11;30601:38;:::i;:::-;30595:4;30551:97;:::i;:::-;30703:4;;30767:2;30756:14;;30784:1;30779:663;;;;31486:1;31503:6;31500:89;;;-1:-1:-1;31555:19:1;;;31549:26;31500:89;-1:-1:-1;;22792:1:1;22788:11;;;22784:24;22780:29;22770:40;22816:1;22812:11;;;22767:57;31602:81;;30749:944;;30779:663;22061:1;22054:14;;;22098:4;22085:18;;-1:-1:-1;;30815:20:1;;;30933:236;30947:7;30944:1;30941:14;30933:236;;;31036:19;;;31030:26;31015:42;;31128:27;;;;31096:1;31084:14;;;;30963:19;;30933:236;;;30937:3;31197:6;31188:7;31185:19;31182:201;;;31258:19;;;31252:26;-1:-1:-1;;31341:1:1;31337:14;;;31353:3;31333:24;31329:37;31325:42;31310:58;31295:74;;31182:201;-1:-1:-1;;;;;31429:1:1;31413:14;;;31409:22;31396:36;;-1:-1:-1;30349:1350:1:o;31704:359::-;31907:6;31896:9;31889:25;31950:6;31945:2;31934:9;31930:18;31923:34;31993:2;31988;31977:9;31973:18;31966:30;31870:4;32013:44;32053:2;32042:9;32038:18;32030:6;32013:44;:::i;32068:629::-;32355:3;32344:9;32337:22;32318:4;32382:45;32422:3;32411:9;32407:19;32399:6;32382:45;:::i;:::-;-1:-1:-1;;;;;32463:32:1;;32458:2;32443:18;;32436:60;32527:2;32512:18;;32505:34;;;32575:22;;;32570:2;32555:18;;32548:50;32615:32;32579:6;32632;32615:32;:::i;:::-;32607:40;;;32684:6;32678:3;32667:9;32663:19;32656:35;32068:629;;;;;;;;:::o;32702:168::-;32775:9;;;32806;;32823:15;;;32817:22;;32803:37;32793:71;;32844:18;;:::i;33220:197::-;-1:-1:-1;;;;;33342:10:1;;;33354;;;33338:27;;33377:11;;;33374:37;;;33391:18;;:::i;:::-;33374:37;33220:197;;;;:::o;33844:337::-;34046:2;34028:21;;;34085:2;34065:18;;;34058:30;-1:-1:-1;;;34119:2:1;34104:18;;34097:43;34172:2;34157:18;;33844:337::o;34186:329::-;34388:2;34370:21;;;34427:1;34407:18;;;34400:29;-1:-1:-1;;;34460:2:1;34445:18;;34438:36;34506:2;34491:18;;34186:329::o;34866:522::-;34944:4;34950:6;35010:11;34997:25;35104:2;35100:7;35089:8;35073:14;35069:29;35065:43;35045:18;35041:68;35031:96;;35123:1;35120;35113:12;35031:96;35150:33;;35202:20;;;-1:-1:-1;;;;;;35234:30:1;;35231:50;;;35277:1;35274;35267:12;35231:50;35310:4;35298:17;;-1:-1:-1;35341:14:1;35337:27;;;35327:38;;35324:58;;;35378:1;35375;35368:12;35393:328;35574:2;35563:9;35556:21;35537:4;35594:62;35652:2;35641:9;35637:18;35629:6;35621;35594:62;:::i;:::-;35586:70;;35706:6;35699:14;35692:22;35687:2;35676:9;35672:18;35665:50;35393:328;;;;;;:::o;37426:290::-;37603:2;37592:9;37585:21;37566:4;37623:44;37663:2;37652:9;37648:18;37640:6;37623:44;:::i;:::-;37615:52;;37703:6;37698:2;37687:9;37683:18;37676:34;37426:290;;;;;:::o;38062:649::-;38351:3;38340:9;38333:22;38314:4;38378:63;38436:3;38425:9;38421:19;38413:6;38405;38378:63;:::i;:::-;-1:-1:-1;;;;;38477:32:1;;38472:2;38457:18;;38450:60;38541:2;38526:18;;38519:34;;;38589:22;;;38584:2;38569:18;;38562:50;38629:32;38593:6;38646;38629:32;:::i;:::-;38621:40;;;38698:6;38692:3;38681:9;38677:19;38670:35;38062:649;;;;;;;;;:::o;38716:136::-;38755:3;38783:5;38773:39;;38792:18;;:::i;:::-;-1:-1:-1;;;38828:18:1;;38716:136::o;38857:300::-;39028:2;39017:9;39010:21;38991:4;39048:44;39088:2;39077:9;39073:18;39065:6;39048:44;:::i;:::-;39040:52;;39142:6;39135:14;39128:22;39123:2;39112:9;39108:18;39101:50;38857:300;;;;;:::o
Swarm Source
ipfs://d1961d3f495572601149d9444e90f149baa4e46aecbcd030adb8829edf9c5de8
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.