98 txs
159 calls
constructor
constructor((address liquidity, address factory, address operateImplementation, address adminImplementation, address secondaryImplementation, address deployer, address supply, address borrow, (address token0, address token1) supplyToken, (address token0, address token1) borrowToken, uint256 vaultId, uint256 vaultType, bytes32 supplyExchangePriceSlot, bytes32 borrowExchangePriceSlot, bytes32 userSupplySlot, bytes32 userBorrowSlot) constants_)
functions
constantsView
viewfunction constantsView() view returns (tuple constantsView_)
fetchLatestPosition
viewfunction fetchLatestPosition(int256 positionTick_, uint256 positionTickId_, uint256 positionRawDebt_, uint256 tickData_) view returns (int256, uint256, uint256 positionRawCol_, uint256 branchId_, uint256 branchData_)
LIQUIDITY
viewfunction LIQUIDITY() view returns (address)
readFromStorage
viewfunction readFromStorage(bytes32 slot_) view returns (uint256 result_)
TYPE
viewfunction TYPE() view returns (uint256)
updateExchangePrices
viewfunction updateExchangePrices(uint256 vaultVariables2_) view returns (uint256 liqSupplyExPrice_, uint256 liqBorrowExPrice_, uint256 vaultSupplyExPrice_, uint256 vaultBorrowExPrice_)
VAULT_FACTORY
viewfunction VAULT_FACTORY() view returns (address)
VAULT_ID
viewfunction VAULT_ID() view returns (uint256)
dexCallback
nonpayablefunction dexCallback(address token_, uint256 amount_)
liquidate
payablefunction liquidate(uint256 token0DebtAmt_, uint256 token1DebtAmt_, uint256 debtSharesMin_, uint256 colPerUnitDebt_, address to_, bool absorb_) payable returns (uint256 actualDebtShares_, uint256 actualCol_)
liquidatePerfect
payablefunction liquidatePerfect(uint256 debtShares_, uint256 token0DebtAmtPerUnitShares_, uint256 token1DebtAmtPerUnitShares_, uint256 colPerUnitDebt_, address to_, bool absorb_) payable returns (uint256 actualDebtShares_, uint256 token0Debt_, uint256 token1Debt_, uint256 actualCol_)
liquidityCallback
nonpayablefunction liquidityCallback(address token_, uint256 amount_, bytes data_)
operate
payablefunction operate(uint256 nftId_, int256 newCol_, int256 newDebtToken0_, int256 newDebtToken1_, int256 debtSharesMinMax_, address to_) payable returns (uint256, int256, int256)
operatePerfect
payablefunction operatePerfect(uint256 nftId_, int256 newCol_, int256 perfectDebtShares_, int256 debtToken0MinMax_, int256 debtToken1MinMax_, address to_) payable returns (uint256, int256[] r_)
rebalance
payablefunction rebalance(int256, int256, int256, int256) payable returns (int256 supplyAmt_, int256 borrowAmt_)
simulateLiquidate
nonpayablefunction simulateLiquidate(uint256 debtAmt_, bool absorb_)
updateExchangePricesOnStorage
nonpayablefunction updateExchangePricesOnStorage() returns (uint256 liqSupplyExPrice_, uint256 liqBorrowExPrice_, uint256 vaultSupplyExPrice_, uint256 vaultBorrowExPrice_)
events
LogAbsorb
event LogAbsorb(uint256 colAbsorbedRaw_, uint256 debtAbsorbedRaw_)
LogLiquidate
event LogLiquidate(address liquidator_, uint256 colAmt_, uint256 debtAmt_, address to_)
LogOperate
event LogOperate(address user_, uint256 nftId_, int256 colAmt_, int256 debtAmt_, address to_)
LogRebalance
event LogRebalance(int256 colAmt_, int256 debtAmt_)
LogUpdateExchangePrice
event LogUpdateExchangePrice(uint256 supplyExPrice_, uint256 borrowExPrice_)
errors
FluidLiquidateResult
error FluidLiquidateResult(uint256 colLiquidated, uint256 debtLiquidated)
FluidLiquidityCalcsError
error FluidLiquidityCalcsError(uint256 errorId_)
FluidSafeTransferError
error FluidSafeTransferError(uint256 errorId_)
FluidVaultError
error FluidVaultError(uint256 errorId_)
creation bytecode
0x6103006040523480156200001257600080fd5b5060405162005f4f38038062005f4f833981016040819052620000359162000594565b808080808080610160015161026081815250506127106102605114158015620000635750614e206102605114155b80156200007557506175306102605114155b8015620000875750619c406102605114155b15620000af576040516330090e6560e11b815261793a60048201526024015b60405180910390fd5b80516001600160a01b0390811661020052602082015181166102205260a0820151811660c0908152820151811660e090815282015181166101005261014082015161024052604082015116156200010b5780604001516200010d565b305b6001600160a01b03166101a05261026051614e201480620001325750619c4061026051145b156200014f5760c08101516001600160a01b031660805262000193565b610100810151516001600160a01b03908116608052815160c0830151821691161462000193576040516330090e6560e11b815261793a6004820152602401620000a6565b617530610260511480620001ab5750619c4061026051145b15620001c85760e08101516001600160a01b031660a0526200020c565b610120810151516001600160a01b0390811660a052815160e083015182169116146200020c576040516330090e6560e11b815261793a6004820152602401620000a6565b61010081018051516001600160a01b03908116610120908152830180515182166101609081529251602090810151831661014052905101518116610180908152830151610280526101a08301516102a0526101c0808401516102c0526101e0808501516102e0526060850151831690915260809093015116909152600080546610000000400000178155600b80546001600160a01b03191661dead17905590840151909250614e2014905080620002c95750619c40826101600151145b62000359576001600160401b03605b60e0516001600160a01b031663b5c736e4610280516040518263ffffffff1660e01b81526004016200030c91815260200190565b602060405180830381865afa1580156200032a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003509190620006c3565b901c1662000360565b64e8d4a510005b905060006175308361016001511480620003805750619c40836101600151145b62000411576001600160401b03609b610100516001600160a01b031663b5c736e46102a0516040518263ffffffff1660e01b8152600401620003c491815260200190565b602060405180830381865afa158015620003e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004089190620006c3565b901c1662000418565b64e8d4a510005b905064e8d4a5100082108062000432575064e8d4a5100081105b1562000456576040516330090e6560e11b81526179246004820152602401620000a6565b60408301516001600160a01b031662000487576040516330090e6560e11b815261793a6004820152602401620000a6565b60401b177ce8d4a51000000000e8d4a51000000000000000000000000000000000001760085550506001805442607a1b6401ffffffff607a1b1990911617905550620006dd565b60405161020081016001600160401b03811182821017156200050057634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146200051e57600080fd5b919050565b6000604082840312156200053657600080fd5b604080519081016001600160401b03811182821017156200056757634e487b7160e01b600052604160045260246000fd5b604052905080620005788362000506565b8152620005886020840162000506565b60208201525092915050565b60006102408284031215620005a857600080fd5b620005b2620004ce565b620005bd8362000506565b8152620005cd6020840162000506565b6020820152620005e06040840162000506565b6040820152620005f36060840162000506565b6060820152620006066080840162000506565b60808201526200061960a0840162000506565b60a08201526200062c60c0840162000506565b60c08201526200063f60e0840162000506565b60e0820152610100620006558582860162000523565b908201526101406200066a8585830162000523565b61012083015261018080850151828401526101a09150818501516101608401526101c080860151828501526101e09150818601518385015261020086015181850152506102208501518184015250508091505092915050565b600060208284031215620006d657600080fd5b5051919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e051615662620008ed6000396000611a8501526000611a5e015260008181610c8d0152611a37015260008181610a1b0152611a100152600081816105de015281816108f50152818161092001528181610b6d01528181610b98015281816119e90152818161363701528181613662015281816137ed015261381801526000818161050801526119c20152600081816101540152818161020e015281816103eb01526117fe0152600081816104b401528181610a4501528181610cb70152818161160701528181611648015281816116f8015281816117d9015281816136f7015261383f015260008181610f7f0152818161187a01526125030152600081816102d2015261185201526000818161082801528181610e46015261182a01526000818161199b01528181613b6001528181613e6d015261413201526000818161197501528181613b2401528181613e310152613fde0152600061194701526000611921015260008181611547015281816118f201528181613abd01528181613dca01528181613f7701526140cb01526000818161150801526118ca0152600081816118a201526122d00152600081816136aa01526137340152600061387b01526156626000f3fe6080604052600436106101125760003560e01c80633202937e116100a5578063ad20750111610074578063b7791bf211610059578063b7791bf2146105aa578063bb24fe8a146105cc578063f4e7bfd11461060057610119565b8063ad2075011461056b578063b5c736e41461058b57610119565b80633202937e146104d6578063540acabc146104f65780637bae3361146105385780639410ae881461054b57610119565b8063103f2907116100e1578063103f2907146103d95780631593a34b1461043257806322348cc71461045a5780632861c7d1146104a257610119565b806302161887146103305780630931bf2d1461036a57806309f0d8cb1461038b57806310259f26146103ab57610119565b3661011957005b34801561012557600080fd5b506040517f4502d0630000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634502d06390602401602060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190614e68565b8061028e57506040517fe04c8e5d0000000000000000000000000000000000000000000000000000000081523060048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e04c8e5d90604401602060405180830381865afa15801561026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028e9190614e68565b6102cd576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792560048201526024015b60405180910390fd5b61032e7f00000000000000000000000000000000000000000000000000000000000000006000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b005b34801561033c57600080fd5b5061034561065f565b6040805194855260208501939093529183015260608201526080015b60405180910390f35b61037d610378366004614ea7565b610780565b604051610361929190614efc565b34801561039757600080fd5b506103456103a6366004614f4a565b6108b9565b6103be6103b9366004614ea7565b610d9d565b60408051938452602084019290925290820152606001610361565b3480156103e557600080fd5b5061040d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610361565b610445610440366004614f63565b610ed8565b60408051928352602083019190915201610361565b34801561046657600080fd5b5061047a610475366004614f63565b61100c565b604080519586526020860194909452928401919091526060830152608082015260a001610361565b3480156104ae57600080fd5b5061040d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e257600080fd5b5061032e6104f1366004614f95565b6112cc565b34801561050257600080fd5b5061052a7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610361565b610445610546366004614fc5565b611362565b34801561055757600080fd5b5061032e610566366004615015565b6114f0565b34801561057757600080fd5b5061032e610586366004615041565b611630565b34801561059757600080fd5b5061052a6105a6366004614f4a565b5490565b3480156105b657600080fd5b506105bf611723565b60405161036191906150ca565b3480156105d857600080fd5b5061052a7f000000000000000000000000000000000000000000000000000000000000000081565b61034561060e366004614fc5565b611aad565b6060600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e81156001810361065657816000803e816000fd5b50505092915050565b6000806000806106706001546108b9565b9296509094509250905067ffffffffffffffff841180610697575067ffffffffffffffff83115b806106a9575067ffffffffffffffff82115b806106bb575067ffffffffffffffff81115b156106f6576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792d60048201526024016102c4565b604083811b8517608084901b1760c083901b17600855600180547ffffffffffffffffffffffffff800000003ffffffffffffffffffffffffffffff1642607a1b179055517fcde545703e0372175cadfff811d67c32910c3dcb33199679b3271c4106afdf9a906107729084908490918252602082015260400190565b60405180910390a190919293565b600b5460009060609073ffffffffffffffffffffffffffffffffffffffff1661dead146107dd576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793d60048201526024016102c4565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055604080516020601f36908101829004820283018201909352828252610869927f00000000000000000000000000000000000000000000000000000000000000009291600091908190840183828082843760009201919091525061061392505050565b80602001905181019061087c91906152f1565b91509150600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559097909650945050505050565b60085460009081908190819067ffffffffffffffff80821690604083901c16836108ee607a8a901c6401ffffffff1642615408565b9050614e207f000000000000000000000000000000000000000000000000000000000000000014806109415750619c407f0000000000000000000000000000000000000000000000000000000000000000145b156109f35764e8d4a51000975067ffffffffffffffff608085901c169550886001166001036109b25761097a6301e1338061271061541b565b60018a901c617fff1661098d838961541b565b610997919061541b565b6109a19190615461565b6109ab908761549c565b9550610b68565b6109c26301e1338061271061541b565b60018a901c617fff166109d5838961541b565b6109df919061541b565b6109e99190615461565b6109ab9087615408565b6040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152610acb907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e4906024015b602060405180830381865afa158015610aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac691906154af565b611c2a565b50975082881015610b0c576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793260048201526024016102c4565b61271061ffff8a16670de0b6b3a7640000858b670de0b6b3a76400000281610b3657610b36615432565b04030281610b4657610b46615432565b670de0b6b3a7640000919004810167ffffffffffffffff608087901c16020495505b6175307f00000000000000000000000000000000000000000000000000000000000000001480610bb95750619c407f0000000000000000000000000000000000000000000000000000000000000000145b15610c655764e8d4a51000965060c084901c9450600160108a901c81169003610c2457610bec6301e1338061271061541b565b60118a901c617fff16610bff838861541b565b610c09919061541b565b610c139190615461565b610c1d908661549c565b9450610d92565b610c346301e1338061271061541b565b60118a901c617fff16610c47838861541b565b610c51919061541b565b610c5b9190615461565b610c1d9086615408565b6040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152610cfb907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e490602401610a85565b97505081871015610d3c576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793260048201526024016102c4565b61271061ffff60108b901c16670de0b6b3a7640000848a670de0b6b3a76400000281610d6a57610d6a615432565b04030281610d7a57610d7a615432565b670de0b6b3a7640000919004810160c086901c020494505b505050509193509193565b600b546000908190819073ffffffffffffffffffffffffffffffffffffffff1661dead14610dfb576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793d60048201526024016102c4565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055604080516020601f36908101829004820283018201909352828252610e87927f00000000000000000000000000000000000000000000000000000000000000009291600091908190840183828082843760009201919091525061061392505050565b806020019051810190610e9a91906154c8565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055919b909a509098509650505050505050565b600b54600090819073ffffffffffffffffffffffffffffffffffffffff1661dead14610f34576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793d60048201526024016102c4565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055604080516020601f36908101829004820283018201909352828252610fc0927f00000000000000000000000000000000000000000000000000000000000000009291600091908190840183828082843760009201919091525061061392505050565b806020019051810190610fd391906154f6565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559097909650945050505050565b600080808080868180600189901c62ffffff168b9003611052575050601a87901c633fffffff169250603887901c6603ffffffffffff166001601989901c8116146110a9565b60008c8152600660205260408120600360028e0181810660550292918491048152602081019190915260400160002054901c600181811c633fffffff169750601f82901c6603ffffffffffff169450908116149150505b600085815260076020526040902054935080156110ec577f80000000000000000000000000000000000000000000000000000000000000009b50600099506112b8565b836003166002036111565761110e82607486901c6603ffffffffffff16611e38565b9150600161111e600f602361549c565b6001901b61112c9190615408565b82146111565760a69390931c633fffffff16600081815260076020526040902054909450926110ec565b836003166003148061118257506001611171600f602361549c565b6001901b61117f9190615408565b82145b156111b3577f80000000000000000000000000000000000000000000000000000000000000009b50600099506112b8565b6111cb8a607486901c6603ffffffffffff1684611ed2565b9950606483048a11156111e85761271061270f8b020499506111ed565b600099505b89156112945783600416600414611210576207ffff600385901c1660000361121b565b6207ffff600385901c165b9b50600061122b8d60020b611f17565b905061271f612710820204633fffffff601687901c811661124c8385615408565b611256919061541b565b6112609190615461565b61126a908261549c565b6112816c010000000000000000000000008e61541b565b61128b9190615461565b975050506112b8565b7f80000000000000000000000000000000000000000000000000000000000000009b505b8b8a97509750505050945094509450945094565b60008054906001821690036112e7576001811760005561131d565b6040517f60121cca00000000000000000000000000000000000000000000000000000000815261791960048201526024016102c4565b8215611329578261133b565b6fffffffffffffffffffffffffffffffff5b925061135d6fffffffffffffffffffffffffffffffff600061dead8585612179565b600080fd5b600b54600090819073ffffffffffffffffffffffffffffffffffffffff1661dead146113be576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793d60048201526024016102c4565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317905560008054906001821690036112e75760018117600055600061140a3447615408565b905073ffffffffffffffffffffffffffffffffffffffff86161561142e5785611430565b335b9550600061143f8b8b8b613a72565b905061144e8189898987612179565b80602001905181019061146191906154c8565b91965094509250808510156114a6576040517f60121cca0000000000000000000000000000000000000000000000000000000081526188ba60048201526024016102c4565b60008390556114b482613c54565b5050600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055509097909650945050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061156957503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b6115a3576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793c60048201526024016102c4565b6000546001166000036115e6576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792a60048201526024016102c4565b600b5461162c90839073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000084613ca8565b5050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146116a3576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792960048201526024016102c4565b6000546001166000036116e6576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792a60048201526024016102c4565b61171d846116f68385018561551a565b7f000000000000000000000000000000000000000000000000000000000000000086613ca8565b50505050565b6117c2604080516102008101825260008082526020808301829052828401829052606083018290526080830182905260a0830182905260c0830182905260e0830182905283518085018552828152808201839052610100840152835180850190945281845283015290610120820190815260006020820181905260408201819052606082018190526080820181905260a0820181905260c09091015290565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811682527f000000000000000000000000000000000000000000000000000000000000000081166020808401919091527f0000000000000000000000000000000000000000000000000000000000000000821660408401527f0000000000000000000000000000000000000000000000000000000000000000821660608401527f0000000000000000000000000000000000000000000000000000000000000000821660808401527f0000000000000000000000000000000000000000000000000000000000000000821660a08401527f0000000000000000000000000000000000000000000000000000000000000000821660c08401527f0000000000000000000000000000000000000000000000000000000000000000821660e0840152610100830180517f000000000000000000000000000000000000000000000000000000000000000084169052517f0000000000000000000000000000000000000000000000000000000000000000831690820152610120830180517f000000000000000000000000000000000000000000000000000000000000000084169052517f00000000000000000000000000000000000000000000000000000000000000009092169101527f00000000000000000000000000000000000000000000000000000000000000006101408201527f00000000000000000000000000000000000000000000000000000000000000006101608201527f00000000000000000000000000000000000000000000000000000000000000006101808201527f00000000000000000000000000000000000000000000000000000000000000006101a08201527f00000000000000000000000000000000000000000000000000000000000000006101c08201527f00000000000000000000000000000000000000000000000000000000000000006101e082015290565b600b5460009081908190819073ffffffffffffffffffffffffffffffffffffffff1661dead14611b0d576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793d60048201526024016102c4565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317905560408051808201909152600080825260208201526000805480835260011690036112e7578051600117600055611b6d3447615408565b602082015273ffffffffffffffffffffffffffffffffffffffff871615611b945786611b96565b335b9650611ba98b8989898560000151612179565b806020019051810190611bbc91906154c8565b835290955091508a15611bda57611bd4858b8b613d6f565b90945092505b80516000556020810151611bed90613c54565b50600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559299919850965090945092505050565b67ffffffffffffffff605b82901c811690609b83901c16811580611c4c575080155b15611c88576040517fd50d75120000000000000000000000000000000000000000000000000000000081526201117160048201526024016102c4565b61ffff8316603a84901c6401ffffffff16428181039160ea87901c617fff16911480611cb2575082155b80611cbd5750806001145b15611cca57505050915091565b64496cebb80084840283020484019350617fff60db87901c16925082600103611cf557505050915091565b82600116600103611d4a5760019290921c91826c7e37be2022c0914b268000000081611d2357611d23615432565b049250612710601e87901c613fff166b033b2e3c9fd0803ce8000000850102049250611d77565b60019290921c916305f5e100601e87901c613fff166127108501026b033b2e3c9fd0803ce8000000020492505b80600116600103611dae5760011c61271081016b033b2e3c9fd0803ce8000000820281611da657611da6615432565b049050611de4565b60011c61271081016b033b2e3c9fd0803ce8000000820281611dd257611dd2615432565b046b033b2e3c9fd0803ce80000000390505b760a70c3c40a64e6c51999090b65f67d92400000000000008382026127100261ffff881691900402601087901c613fff16612710030292506801b5a660ea44b8000085840283020485019450505050915091565b6000600f83811c9083901c0281681fffffffffffffffff8211611e5c576022611e5f565b60235b91821c919050617fff858116908516018101614000811015611e8057600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00001617fff811115611ebf57506603ffffffffffff9250611ecc915050565b80600f84901b1793505050505b92915050565b6000617fff838116908316036081811015611f0a57600f83811c821b9085901c860281611f0157611f01615432565b04915050611f10565b60009150505b9392505050565b600060ff82901d80831803617fff811115611f3157600080fd5b7001000000000000000000000000000000006001821615611f5f57506fff9dd7de423466c20352b1246ce4856f5b6002821615611f7e576fff3bd55f4488ad277531fa1c725a66d00260801c5b6004821615611f9d576ffe78410fd6498b73cb96a6917f8532590260801c5b6008821615611fbc576ffcf2d9987c9be178ad5bfeffaa1232730260801c5b6010821615611fdb576ff9ef02c4529258b057769680fc6601b30260801c5b6020821615611ffa576ff402d288133a85a17784a411f7aba0820260801c5b6040821615612019576fe895615b5beb6386553757b0352bda900260801c5b6080821615612038576fd34f17a00ffa00a8309940a15930391a0260801c5b610100821615612058576fae6b7961714e20548d88ea5123f9a0ff0260801c5b610200821615612078576f76d6461f27082d74e0feed3b388c0ca10260801c5b610400821615612098576f372a3bfe0745d8b6b19d985d9a8b85bb0260801c5b6108008216156120b8576f0be32cbee48979763cf7247dd7bb539d0260801c5b6110008216156120d7576e8d4f70c9ff4924dac37612d1e2921e0260801c5b6120008216156120f5576d4e009ae5519380809a02ca7aec770260801c5b614000821615612111576b17c45e641b6e95dee056ff100260801c5b600091507f8000000000000000000000000000000000000000000000000000000000000000841661216f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0463ffffffff81161561216f57600191505b60201c0192915050565b60606121bb6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001548152600283901c620fffff16600003612207576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791f60048201526024016102c4565b8051612212906108b9565b9091925090915082606001836080018281525082815250505061228f6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6122c86040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000806123037f0000000000000000000000000000000000000000000000000000000000000000633fffffff605c8860000151901c1661424a565b73ffffffffffffffffffffffffffffffffffffffff1663f3190c896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561234d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237191906154af565b9150760a70c3c40a64e6c51999090b65f67d9240000000000000821180612396575081155b156123d1576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793960048201526024016102c4565b846080015185606001518302816123ea576123ea615432565b049150722cd76fe086b93ce2f768a00b22a0000000000082111561241f57722cd76fe086b93ce2f768a00b22a0000000000091505b81760a70c3c40a64e6c51999090b65f67d92400000000000008161244557612445615432565b865191900491506127109060481c6103ff16810182020460608501526b033b2e3c9fd0803ce80000006c010000000000000000000000008302865191900492506103e890602a1c6103ff16830204905061249e816146b4565b50602086015284516103e89060341c6103ff1683020490506124bf816146b4565b5060408601526004808816146124e1576207ffff600388901c166000036124ec565b6207ffff600388901c165b60c0850181905260408601511215612641576125bd7f0000000000000000000000000000000000000000000000000000000000000000888760400151604051602401612542929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9e3e482100000000000000000000000000000000000000000000000000000000179052610613565b8060200190518101906125d091906154af565b9650866004166004146125ef576207ffff600388901c166000036125fa565b6207ffff600388901c165b60c085015260008b90036126415760408051600060208201819052918101919091526060810188905260800160405160208183030381529060405295505050505050613a69565b6127108b108061266057506fffffffffffffffffffffffffffffffff8b115b1561269b576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792e60048201526024016102c4565b60028716156126ab5760026126ae565b60015b60ff16846101000181815250506126fb6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60c08501518152601688901c633fffffff16808552600090815260076020908152604082205490860181905260741c6603ffffffffffff1660608601819052900361274e576603ffffffffc00060608501525b602084015160c41c620fffff16925082156127955782600116600114612780576207ffff600184901c1660000361278b565b6207ffff600184901c165b60808501526127bc565b7f800000000000000000000000000000000000000000000000000000000000000060808501525b856080015164e8d4a510008d02816127d6576127d6615432565b0480865266ffffffffffffff609a8a901c1660ff60928b901c161b9250612801633b9aca0084615461565b111561283d576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792e60048201526024016102c4565b88156128d05760025485516fffffffffffffffffffffffffffffffff8216945060809190911c92508311156128b5578451839061287a908461541b565b6128849190615461565b60a086018190526128959083615408565b855160808088018290526000885282901b940393841760025591506128d0565b6000600255845183900385526080850183905260a085018290525b85602001518560c00151131561347d5784511561347d576040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081018290528190680100000000000000009060008960c001511261294c576101008960c001518161294657612946615432565b05612969565b60016101008a60c001516001018161296657612966615432565b05035b6040820152845161297990611f17565b60408601526101008901516001036129a457604085015160e08a015260c08901516020820152612ac9565b61271f856040015161271002816129bd576129bd615432565b046060860181905260408601510360808601819052602089015160161c633fffffff90811660c0880181905290910260608701519190040160e08a0152845160208b0151600101148015612a1557508460c001516001145b15612ac9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215373ffffffffffffffffffffffffffffffffffffffff8f1601612a93576040517fcc36aa4400000000000000000000000000000000000000000000000000000000815260006004820181905260248201526044016102c4565b6040517f60121cca00000000000000000000000000000000000000000000000000000000815261793560048201526024016102c4565b886101000151600103612b395760c0890180516000908152600560205260408082205460608c01518c5194518452919092206301fffffe8316601a9490941b9390931760389190911b1760011790915566ffffffffffffff602182901c1660ff601983901c161b97509550612b5c565b67ffffffffffffffff60348960200151901c16965060ff8716600888901c901b96505b8689602001818151612b6e919061549c565b90525060e0890151612b8d6c010000000000000000000000008961541b565b612b979190615461565b89604001818151612ba8919061549c565b90525060c08901516020820151148015612bc757508861010001516001145b80612bd457506080810151155b15612d04578060800151600003612bfd5760408082015160009081526004602052205460808201525b886101000151600103612c5457604081015160c08a015160009081036101009283020190910160608301819052608083018051821b90911c908190529003612c545760408082015160009081526004602052908120555b608081015115612c82576001612c6d8260800151614ac9565b60408301516101000201036020820152612d04565b89602001518160400151610100021215612cc1577f80000000000000000000000000000000000000000000000000000000000000006020820152612d04565b604080820180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01908190526000908152600460205220546080820152612c54565b80602001518860800151138015612d22575089602001518860800151135b15612d3f5760808801516101208a015260026101608a0152612d7b565b896020015181602001511315612d675760208101516101208a015260016101608a0152612d7b565b60208a01516101208a015260036101608a01525b612d8c89610120015160020b611f17565b6040860152610160890151600203612e205761271f85604001516127100281612db757612db7615432565b046060860181905260408087015191909103608087019081526020808b015160a61c633fffffff908116600090815260079092529290205460a08b0181905260161c821660c0880181905290510260608701519190040160a086018190526101408a0152612e3d565b604085015160a086018190526101408a0152633fffffff60c08601525b6c010000000000000000000000008961014001518a60600151612e60919061541b565b612e6a9190615461565b612e80906b033b2e3c9fd0803ce8000000615408565b8960e001518a602001518b6101400151612e9a919061541b565b612ea49190615461565b8a60200151612eb39190615408565b612ec9906b033b2e3c9fd0803ce800000061541b565b612ed39190615461565b93506b033b2e3c9fd0803ce8000000896060015185612ef2919061541b565b612efc9190615461565b925083896020015103612f1757612f14600185615408565b93505b885184101580612f2c57508861016001516003145b156132975760808101516040808301516000908152600460205220558851841061310c57885160608a01519094506b033b2e3c9fd0803ce800000090612f72908661541b565b612f7c9190615461565b9250828960400151612f8e9190615408565b6c01000000000000000000000000858b60200151612fac9190615408565b612fb6919061541b565b612fc09190615461565b9650612fcb876146b4565b60608701528086526101208a0151138015612fed5750633fffffff8560c00151145b156130055784516002018552600160c086015261311f565b84516001018552610160890151600214801561302657506101208901518551145b613031576000613037565b8460c001515b9550612710856060015161271f028161305257613052615432565b046040860181905260608601519081900360808701819052908803633fffffff028161308057613080615432565b0460c08601819052156130b157633fffffff8560c0015110156130a7578460c001516130b4565b633ffffffe6130b4565b60015b60c086015285158015906130cc57508460c001518610155b15613107576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793860048201526024016102c4565b61311f565b6101208901516001908101865260c08601525b602089015161312e8582615408565b613138908461541b565b6131429190615461565b91508389608001818151613156919061549c565b90525060208901805185919061316d908390615408565b90525060a08901805184919061318490839061549c565b90525060408901805184919061319b908390615408565b90525060608801516131ad9083614b7f565b60608901526020890151606411156131f5576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793060048201526024016102c4565b845160001361320b578451600190811b17613214565b845160000360011b5b606089015160208b015191975060741b9060349061323790603860086001614c32565b901b60168760c00151901b600289901b60a6808d60200151901c901b60011717171717600760008a6000015181526020019081526020016000208190555060168860000151901b600287901b6034808f901c901b60021717179b50613478565b8851849003895260208901516132ad8582615408565b6132b7908461541b565b6132c19190615461565b915083896080018181516132d5919061549c565b9052506020890180518591906132ec908390615408565b90525060a08901805184919061330390839061549c565b90525060408901805184919061331a908390615408565b905250606088015161332c9083614b7f565b606089015261016089015168010000000000000000925060020361345157633fffffff60a68960200151901c1696508760a00151955060006603ffffffffffff607488901c169050600061338d8a6060015183614d5b90919063ffffffff16565b6020808c0180518d516000908152600790935260409092207fffffffffffffffffffffffc00000000000000000000000000000000000000000909216607484901b17600217909155998b5298889052506060890181905260c487901c620fffff169788156134275788600116600114613412576207ffff60018a901c1660000361341d565b6207ffff60018a901c165b60808b015261344e565b7f800000000000000000000000000000000000000000000000000000000000000060808b01525b50505b61012089015160c08a01526101608901516101008a015261014089015160e08a0152612ac9565b505050505b64e8d4a5100086608001518660800151613497919061541b565b6134a19190615461565b8660a001818152505064e8d4a5100086606001518660a001516134c4919061541b565b6134ce9190615461565b60c087015260a08601518c101561350a5760a08601516134ee908d615461565b8660c001516134fd919061541b565b60c087015260a086018c90525b8560a0015160000361354c576040517f60121cca00000000000000000000000000000000000000000000000000000000815261793560048201526024016102c4565b8a8660a001518760c00151670de0b6b3a764000061356a919061541b565b6135749190615461565b10156135b0576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792160048201526024016102c4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215373ffffffffffffffffffffffffffffffffffffffff8b16016136325760c086015160a08701516040517fcc36aa44000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016102c4565b6175307f000000000000000000000000000000000000000000000000000000000000000014806136835750619c407f0000000000000000000000000000000000000000000000000000000000000000145b6137e8577fffffffffffffffffffffffff11111111111111111111111111111111111111127f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16016136f0578560a0015192506136f5565b600092505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e15847f000000000000000000000000000000000000000000000000000000000000000060008a60a0015161376390615537565b604080513360208201526000918291016040516020818303038152906040526040518863ffffffff1660e01b81526004016137a3969594939291906155d3565b604080518083038185885af11580156137c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137e591906154f6565b50505b614e207f000000000000000000000000000000000000000000000000000000000000000014806138395750619c407f0000000000000000000000000000000000000000000000000000000000000000145b613922577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e157f00000000000000000000000000000000000000000000000000000000000000008860c001516138a890615537565b604080516000808252602082019092528f9082906040518763ffffffff1660e01b81526004016138dd969594939291906155d3565b60408051808303816000875af11580156138fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391f91906154f6565b50505b67ffffffffffffffff605289901c1692508460a0015160ff8416600885901c901b61394d9190615408565b925067ffffffffffffffff609289901c169150846080015160ff8316600884901c901b61397a9190615408565b9150609261398d83603860086001614c32565b901b60526139a085603860086000614c32565b60c089015160a08a015160408051338152602081019390935282015273ffffffffffffffffffffffffffffffffffffffff8e1660608201527ffffffffffffc00000000000000000000000000000003ffffffffffffffffffff909b16911b1717977f80fd9cc6b1821f4a510e45ffce6852ea3404807b5d3d833ffa85664408afcb669060800160405180910390a160a086015160c08701516040805160208101939093528201526060810189905260800160405160208183030381529060405296505050505050505b95945050505050565b600083158015613a80575082155b15613abb576040517f60121cca0000000000000000000000000000000000000000000000000000000081526188b960048201526024016102c4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636876698173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614613bbc577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14613bb6576000613bbe565b84613bbe565b855b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810188905260248101879052604481018690526000606482015260840160206040518083038185885af1158015613c27573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c4c91906154af565b949350505050565b303181811115613c6a5761162c33838303614e06565b8181101561162c576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791b60048201526024016102c4565b60006040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff841660248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080613d68576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155960048201526024016102c4565b5050505050565b60008080670de0b6b3a7640000613d86878761541b565b613d909190615461565b90506000670de0b6b3a7640000613da7888761541b565b613db19190615461565b9050600082118015613dc35750600081115b15613f62577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635b3d38d773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614613ec9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14613ec3576000613ecb565b82613ecb565b835b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481018b9052602481018690526044810185905260006064820152608401604080518083038185885af1158015613f33573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f5891906154f6565b9094509250614240565b600082118015613f70575080155b156140b6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330acd6fd73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461401f576000614021565b835b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481018b905260248101869052604481018590526000606482015260840160206040518083038185885af115801561408a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140af91906154af565b9350614240565b811580156140c45750600081115b1561420a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330acd6fd73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614614173576000614175565b825b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152600481018b905260248101869052604481018590526000606482015260840160206040518083038185885af11580156141de573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061420391906154af565b9250614240565b6040517f60121cca0000000000000000000000000000000000000000000000000000000081526188b960048201526024016102c4565b5050935093915050565b6000606082600003614260576000915050611ecc565b607f8311614329576040517fd60000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b16602282015260f884901b7fff000000000000000000000000000000000000000000000000000000000000001660368201526037015b60405160208183030381529060405290506146a5565b60ff8311614406576040517fd70000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f8100000000000000000000000000000000000000000000000000000000000000603682015260f884901b7fff00000000000000000000000000000000000000000000000000000000000000166037820152603801614313565b61ffff83116144e4576040517fd80000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f820000000000000000000000000000000000000000000000000000000000000060368201527fffff00000000000000000000000000000000000000000000000000000000000060f085901b166037820152603901614313565b62ffffff83116145c3576040517fd90000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f830000000000000000000000000000000000000000000000000000000000000060368201527fffffff000000000000000000000000000000000000000000000000000000000060e885901b166037820152603a01614313565b6040517fda0000000000000000000000000000000000000000000000000000000000000060208201527f940000000000000000000000000000000000000000000000000000000000000060218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1660228201527f840000000000000000000000000000000000000000000000000000000000000060368201527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b166037820152603b0160405160208183030381529060405290505b80516020909101209392505050565b600080630235b88083107473d85bca016a2338b31715f8e13054c005f8b995d3841117156146e157600080fd5b6c01000000000000000000000000831060008161471757506c010000000000000000000000006a52b7d2dcc80cd2e40000008502045b811561473a57507652b7d2dcc80cd2e40000000000000000000000000000008490045b6f037af932b2affa9738cc6c38ca527831811061477b57614000841793506f037af932b2affa9738cc6c38ca5278316a52b7d2dcc80cd2e400000082020490505b6d010f7a088a76f267264caa114f0a81106147b857612000841793506d010f7a088a76f267264caa114f0a6a52b7d2dcc80cd2e400000082020490505b6b95da74f87f839fc2e0dc5bd981106147f157611000841793506b95da74f87f839fc2e0dc5bd96a52b7d2dcc80cd2e400000082020490505b6b06f55dedafd8491caed5a1b8811061482a57610800841793506b06f55dedafd8491caed5a1b86a52b7d2dcc80cd2e400000082020490505b6b017fdd10ee11e624491b4cc1811061486357610400841793506b017fdd10ee11e624491b4cc16a52b7d2dcc80cd2e400000082020490505b6ab23131bf0c30217b0a2c69811061489a57610200841793506ab23131bf0c30217b0a2c696a52b7d2dcc80cd2e400000082020490505b6a79683edcb9280d797aded781106148d157610100841793506a79683edcb9280d797aded76a52b7d2dcc80cd2e400000082020490505b6a64366e2f9919f0d9b0dc908110614907576080841793506a64366e2f9919f0d9b0dc906a52b7d2dcc80cd2e400000082020490505b6a5b0bcda5a78850646b0a81811061493d576040841793506a5b0bcda5a78850646b0a816a52b7d2dcc80cd2e400000082020490505b6a56c840f992c70f959ae8108110614973576020841793506a56c840f992c70f959ae8106a52b7d2dcc80cd2e400000082020490505b6a54b9cd178695194f9be0a081106149a9576010841793506a54b9cd178695194f9be0a06a52b7d2dcc80cd2e400000082020490505b6a53b7458aff204b5e65d68181106149df576008841793506a53b7458aff204b5e65d6816a52b7d2dcc80cd2e400000082020490505b6a53372a2f38c240d689e4008110614a15576004841793506a53372a2f38c240d689e4006a52b7d2dcc80cd2e400000082020490505b6a52f76617a04499e66400008110614a4b576002841793506a52f76617a04499e66400006a52b7d2dcc80cd2e400000082020490505b6a52d79660f3dec355c000008110614a81576001841793506a52d79660f3dec355c000006a52b7d2dcc80cd2e400000082020490505b81614a9957806a52b7d2dcc80cd2e400000086020492505b8115614ab5579219926a52d79660f3dec355c000008582020492505b505082811115614ac457600080fd5b915091565b6000816fffffffffffffffffffffffffffffffff831115614aeb5760809150811c5b67ffffffffffffffff811115614b03576040918201911c5b63ffffffff811115614b17576020918201911c5b61ffff811115614b29576010918201911c5b60ff811115614b3a576008918201911c5b600f811115614b4b576004918201911c5b6003811115614b5c576002918201911c5b6001811115614b6c576001820191505b8015614b79576001820191505b50919050565b6000600f83901c8202816c03ffffffffffffffffffffffff8211614bc6576c01ffffffffffffffffffffffff8211614bbf57614bba82614ac9565b614bc9565b6062614bc9565b60635b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd617fff87168201810194500191821c919050604083111561135d5750600f1b017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00192915050565b600080856fffffffffffffffffffffffffffffffff811115614c555760809150811c5b67ffffffffffffffff811115614c6d576040918201911c5b63ffffffff811115614c81576020918201911c5b61ffff811115614c93576010918201911c5b60ff811115614ca4576008918201911c5b600f811115614cb5576004918201911c5b6003811115614cc6576002918201911c5b6001811115614cd6576001820191505b8015614ce3576001820191505b5084811015614cef5750835b848103905085811c60008211841615614d3e57600181019050806001871b03614d3e57506001908101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86011b5b6001851b8210614d4d57600080fd5b90931b909201949350505050565b600080600f83901c7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000603186901b1681614d9757614d97615432565b0490506000604082901c600114614daf576040614db2565b60415b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd81019290921c91617fff8581166040019250613fdd908716909101018181111561135d5703600f9190911b179050611ecc565b60008060008060008587614e20f1905080614e52576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a60048201526024016102c4565b505050565b8015158114614e6557600080fd5b50565b600060208284031215614e7a57600080fd5b8151611f1081614e57565b73ffffffffffffffffffffffffffffffffffffffff81168114614e6557600080fd5b60008060008060008060c08789031215614ec057600080fd5b863595506020870135945060408701359350606087013592506080870135915060a0870135614eee81614e85565b809150509295509295509295565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015614f3d57845183529383019391830191600101614f21565b5090979650505050505050565b600060208284031215614f5c57600080fd5b5035919050565b60008060008060808587031215614f7957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215614fa857600080fd5b823591506020830135614fba81614e57565b809150509250929050565b60008060008060008060c08789031215614fde57600080fd5b86359550602087013594506040870135935060608701359250608087013561500581614e85565b915060a0870135614eee81614e57565b6000806040838503121561502857600080fd5b823561503381614e85565b946020939093013593505050565b6000806000806060858703121561505757600080fd5b843561506281614e85565b935060208501359250604085013567ffffffffffffffff8082111561508657600080fd5b818701915087601f83011261509a57600080fd5b8135818111156150a957600080fd5b8860208285010111156150bb57600080fd5b95989497505060200194505050565b815173ffffffffffffffffffffffffffffffffffffffff16815261024081016020830151615110602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151615138604084018273ffffffffffffffffffffffffffffffffffffffff169052565b506060830151615160606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151615188608084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a08301516151b060a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c08301516151d860c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e083015161520060e084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061010083810151805173ffffffffffffffffffffffffffffffffffffffff90811685840152602082015116610120850152505061012083015161014061526c81850183805173ffffffffffffffffffffffffffffffffffffffff908116835260209182015116910152565b840151610180848101919091526101608501516101a080860191909152908501516101c080860191909152908501516101e080860191909152908501516102008501529093015161022090920191909152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561530457600080fd5b8251915060208084015167ffffffffffffffff8082111561532457600080fd5b818601915086601f83011261533857600080fd5b81518181111561534a5761534a6152c2565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110858211171561538d5761538d6152c2565b6040529182528482019250838101850191898311156153ab57600080fd5b938501935b828510156153c9578451845293850193928501926153b0565b8096505050505050509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115611ecc57611ecc6153d9565b8082028115828204841417611ecc57611ecc6153d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615497577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820180821115611ecc57611ecc6153d9565b6000602082840312156154c157600080fd5b5051919050565b6000806000606084860312156154dd57600080fd5b8351925060208401519150604084015190509250925092565b6000806040838503121561550957600080fd5b505080516020909101519092909150565b60006020828403121561552c57600080fd5b8135611f1081614e85565b60007f80000000000000000000000000000000000000000000000000000000000000008203615568576155686153d9565b5060000390565b6000815180845260005b8181101561559557602081850181015186830182015201615579565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff8089168352876020840152866040840152808616606084015280851660808401525060c060a083015261562060c083018461556f565b9897505050505050505056fea264697066735822122052136712f215493250caf5139a94b0d10832ec232170faccfd1147e2c8c866e564736f6c6343000815003300000000000000000000000052aa899454998be5b000ad077a46bbe360f4e497000000000000000000000000324c5dc1fc42c7a4d43d92df1eba58a54d13bf2d000000000000000000000000e744fbf66bb744729ef15c2441a4eb76387b939d000000000000000000000000f37f9bfe8d062be59e8e148d655253bac971354d000000000000000000000000b6ff36e7d04e6017e0323f1f92a8184370d489070000000000000000000000004ec7b668baf70d4a4b0fc7941a7708a07b6d45be00000000000000000000000052aa899454998be5b000ad077a46bbe360f4e4970000000000000000000000003c0441b42195f4ad6aa9a0978e06096ea616cda700000000000000000000000035751007a407ca6feffe80b3cb397736d2cf4dbe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb900000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000007530d06de6f76fcf41f3bec6f17a1b4ff63356933e470c07e0948b645e0e18127a0d00000000000000000000000000000000000000000000000000000000000000007dc57108181af2953cb3a4d0e5f1da2c1916a600397efb441283281853d0a198a27ac8d1c3b0fa75de2eac8471cea0ab2194406aadd390e00a69b2b6ca092386