[ { "inputs": [ { "internalType": "address", "name": "_SY", "type": "address" }, { "internalType": "address", "name": "_PT", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint8", "name": "__decimals", "type": "uint8" }, { "internalType": "uint256", "name": "_expiry", "type": "uint256" }, { "internalType": "bool", "name": "_doCacheIndexSameBlock", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ArrayEmpty", "type": "error" }, { "inputs": [], "name": "ArrayLengthMismatch", "type": "error" }, { "inputs": [], "name": "YCExpired", "type": "error" }, { "inputs": [], "name": "YCNoFloatingSy", "type": "error" }, { "inputs": [], "name": "YCNotExpired", "type": "error" }, { "inputs": [], "name": "YCNothingToRedeem", "type": "error" }, { "inputs": [], "name": "YCPostExpiryDataNotSet", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "actualSy", "type": "uint256" }, { "internalType": "uint256", "name": "requiredSy", "type": "uint256" } ], "name": "YieldContractInsufficientSy", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountPYToRedeem", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountSyOut", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amountInterestFee", "type": "uint256" } ], "name": "CollectInterestFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "rewardToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountRewardFee", "type": "uint256" } ], "name": "CollectRewardFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiverPT", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiverYT", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountSyToMint", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountPYOut", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newIndex", "type": "uint256" } ], "name": "NewInterestIndex", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "interestOut", "type": "uint256" } ], "name": "RedeemInterest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "amountRewardsOut", "type": "uint256[]" } ], "name": "RedeemRewards", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "PT", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SY", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "doCacheIndexSameBlock", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "expiry", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPostExpiryData", "outputs": [ { "internalType": "uint256", "name": "firstPYIndex", "type": "uint256" }, { "internalType": "uint256", "name": "totalSyInterestForTreasury", "type": "uint256" }, { "internalType": "uint256[]", "name": "firstRewardIndexes", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "userRewardOwed", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRewardTokens", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isExpired", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiverPT", "type": "address" }, { "internalType": "address", "name": "receiverYT", "type": "address" } ], "name": "mintPY", "outputs": [ { "internalType": "uint256", "name": "amountPYOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "receiverPTs", "type": "address[]" }, { "internalType": "address[]", "name": "receiverYTs", "type": "address[]" }, { "internalType": "uint256[]", "name": "amountSyToMints", "type": "uint256[]" } ], "name": "mintPYMulti", "outputs": [ { "internalType": "uint256[]", "name": "amountPYOuts", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "postExpiry", "outputs": [ { "internalType": "uint128", "name": "firstPYIndex", "type": "uint128" }, { "internalType": "uint128", "name": "totalSyInterestForTreasury", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pyIndexCurrent", "outputs": [ { "internalType": "uint256", "name": "currentIndex", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pyIndexLastUpdatedBlock", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pyIndexStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bool", "name": "redeemInterest", "type": "bool" }, { "internalType": "bool", "name": "redeemRewards", "type": "bool" } ], "name": "redeemDueInterestAndRewards", "outputs": [ { "internalType": "uint256", "name": "interestOut", "type": "uint256" }, { "internalType": "uint256[]", "name": "rewardsOut", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "redeemInterestAndRewardsPostExpiryForTreasury", "outputs": [ { "internalType": "uint256", "name": "interestOut", "type": "uint256" }, { "internalType": "uint256[]", "name": "rewardsOut", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "redeemPY", "outputs": [ { "internalType": "uint256", "name": "amountSyOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "amountPYToRedeems", "type": "uint256[]" } ], "name": "redeemPYMulti", "outputs": [ { "internalType": "uint256[]", "name": "amountSyOuts", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardIndexesCurrent", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "setPostExpiryData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "syReserve", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userInterest", "outputs": [ { "internalType": "uint128", "name": "index", "type": "uint128" }, { "internalType": "uint128", "name": "accrued", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "userReward", "outputs": [ { "internalType": "uint128", "name": "index", "type": "uint128" }, { "internalType": "uint128", "name": "accrued", "type": "uint128" } ], "stateMutability": "view", "type": "function" } ]
61014060405234620004d1576200518c803803806200001e81620004d6565b928339810160e082820312620004d1576200003982620004fc565b60209062000049828501620004fc565b604085015190926001600160401b0391828111620004d157856200006f91880162000511565b94606087015190838211620004d1576200008b91880162000511565b9460808701519260ff84168403620004d15760c060a0890151980151968715158803620004d1578251828111620003d1576003918254916001958684811c94168015620004c6575b88851014620004b0578190601f948581116200045a575b508890858311600114620003f357600092620003e7575b505060001982861b1c191690861b1783555b8051938411620003d15760049586548681811c91168015620003c6575b82821014620003b15783811162000366575b5080928511600114620002f85750938394918492600095620002ec575b50501b92600019911b1c19161790555b608052600280546001600160f81b0316600160f81b17905560a05260c0526101009182523360e052610120908152604051614c089290919083620005848439608051836121a7015260a05183818161024e0152818161057a01528181610b9d01528181610c8c01528181610efc015281816117b50152818161194f01528181612c7c01528181612f2d015281816133e7015281816135710152818161395201528181613e10015281816143c8015261455e015260c0518381816106260152818161360201528181613d2e0152818161423a0152614285015260e0518381816108da01528181610daf0152818161148d015281816117ee0152611ac801525182818161035401528181610492015281816107bd015281816109bc01528181610b1f01528181610d3d0152818161134301528181611fe901528181612202015281816130820152818161362601528181613dce01528181614210015281816142b80152818161442a01526145b401525181818161210e0152612ec10152f35b0151935038806200015f565b92919084601f1981168860005285600020956000905b898383106200034b575050501062000330575b50505050811b0190556200016f565b01519060f884600019921b161c191690553880808062000321565b8587015189559097019694850194889350908101906200030e565b87600052816000208480880160051c820192848910620003a7575b0160051c019087905b8281106200039a57505062000142565b600081550187906200038a565b9250819262000381565b602288634e487b7160e01b6000525260246000fd5b90607f169062000130565b634e487b7160e01b600052604160045260246000fd5b01519050388062000101565b90889350601f19831691876000528a6000209260005b8c8282106200044357505084116200042a575b505050811b01835562000113565b015160001983881b60f8161c191690553880806200041c565b8385015186558c9790950194938401930162000409565b90915085600052886000208580850160051c8201928b8610620004a6575b918a91869594930160051c01915b82811062000496575050620000ea565b600081558594508a910162000486565b9250819262000478565b634e487b7160e01b600052602260045260246000fd5b93607f1693620000d3565b600080fd5b6040519190601f01601f191682016001600160401b03811183821017620003d157604052565b51906001600160a01b0382168203620004d157565b919080601f84011215620004d15782516001600160401b038111620003d15760209062000547601f8201601f19168301620004d6565b92818452828287010111620004d15760005b8181106200056f57508260009394955001015290565b85810183015184820184015282016200055956fe608080604052600436101561001357600080fd5b60003560e01c90816306fdde03146126f957508063095ea7b3146126aa5780630a2b83a7146126515780630b49fcef1461251057806318160ddd146124b35780631d52edc4146123ed57806323b872dd146122275780632f13b60c146121cb578063313ce5671461216f5780634ba6dcd714612133578063516399df146120d85780635333581914611f025780635cbadbe414611e6757806360e0a9e114611e1957806370a0823114611dae5780637d24da4d1461129357806395d89b411461113b578063a9059cbb14611067578063acc5da4c14610cb0578063afd27bf514610c41578063b0d8898114610a55578063bcb7ea5d146108fe578063c45a01551461088f578063c4f59f9b146107fd578063cdbb03611461070f578063d2a3584e146106d0578063d68076c31461064a578063d94073d4146105db578063db74aa15146103f4578063dd62ed3e14610377578063e184c9be1461031e5763f8b2f9911461017f57600080fd5b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610319576002546101c160028260f81c1415612a3c565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80921617600255604051907ff8b2f9910000000000000000000000000000000000000000000000000000000082526000826004818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af190811561030d576102c2926000926102c6575b507f0100000000000000000000000000000000000000000000000000000000000000906002541617600255604051918291602083526020830190612880565b0390f35b7f0100000000000000000000000000000000000000000000000000000000000000919250610306903d806000833e6102fe8183612944565b810190612cd0565b9190610283565b6040513d6000823e3d90fd5b600080fd5b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103195760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610319576103ae61283a565b6103b661285d565b9073ffffffffffffffffffffffffffffffffffffffff8091166000526001602052604060002091166000526020526020604060002054604051908152f35b346103195760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195761042b61283a565b61043361285d565b6002549061044760028360f81c1415612a3c565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80931617600255427f000000000000000000000000000000000000000000000000000000000000000011156105b15761057361056e7f010000000000000000000000000000000000000000000000000000000000000092604051956104ec87612928565b600187526020968736818301376040519161050683612928565b600183528836818501376040519361051d85612928565b6001855289368187013761052f613569565b610538866129ec565b52610542846129ec565b73ffffffffffffffffffffffffffffffffffffffff8092169052610565836129ec565b911690526135d1565b6129ec565b519161059e7f0000000000000000000000000000000000000000000000000000000000000000613995565b6007556002541617600255604051908152f35b60046040517f5b15a6da000000000000000000000000000000000000000000000000000000008152fd5b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103195760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195773ffffffffffffffffffffffffffffffffffffffff61069661283a565b166000908152600660209081526040918290205482516fffffffffffffffffffffffffffffffff8216815260809190911c91810191909152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031957602060085460801c604051908152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610319577f010000000000000000000000000000000000000000000000000000000000000060025461077260028260f81c1415612a3c565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80921617600255427f000000000000000000000000000000000000000000000000000000000000000011156107f0575b6002541617600255600080f35b6107f8613373565b6107e3565b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031957610834612c39565b6040518091602080830160208452825180915260206040850193019160005b82811061086257505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610853565b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610319576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195761093661283a565b7f010000000000000000000000000000000000000000000000000000000000000061057361056e6002549361097160028660f81c1415612a3c565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80961617600255427f00000000000000000000000000000000000000000000000000000000000000001115610a48575b6040516109ee81612928565b6001815286368183013760405191610a0583612928565b60018352873681850137610a1761420d565b610a20846129ec565b5273ffffffffffffffffffffffffffffffffffffffff610a3f836129ec565b91169052613d0a565b610a50613373565b6109e2565b346103195760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195767ffffffffffffffff60043581811161031957610aa59036906004016128b4565b909160243590811161031957610abf9036906004016128b4565b9160025492610ad460028560f81c1415612a3c565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80951617600255427f00000000000000000000000000000000000000000000000000000000000000001115610c34575b808203610c0a578115610be057610b917f010000000000000000000000000000000000000000000000000000000000000093610b896102c297610b97953691612aef565b923691612aa1565b90613d0a565b91610bc17f0000000000000000000000000000000000000000000000000000000000000000613995565b6007556002541617600255604051918291602083526020830190612880565b60046040517ff1364a74000000000000000000000000000000000000000000000000000000008152fd5b60046040517fa24a13a6000000000000000000000000000000000000000000000000000000008152fd5b610c3c613373565b610b45565b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031957600254610cf260028260f81c1415612a3c565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80921617600255427f000000000000000000000000000000000000000000000000000000000000000011801561105a575b6110305773ffffffffffffffffffffffffffffffffffffffff906040517f61d027b30000000000000000000000000000000000000000000000000000000081526020928382600481847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561030d57600092610ff9575b50610de9612c39565b610df3815161299d565b92610dfc613908565b60005b8251811015610e955780610e43610e2386610e1c60019588612a28565b5116613995565b86610e2e8488612a28565b5116600052600b8a5260406000205490612b7b565b610e4d8288612a28565b5284610e598286612a28565b51167f880a48d40a6133941abdcfabd5c5f9a791b1e6c8afd23138c5a36e3d9503922289610e87848a612a28565b51604051908152a201610dff565b50939181519184518303610f9b5760005b838110610f705787876102c2887f010000000000000000000000000000000000000000000000000000000000000089610f4f600954956fffffffffffffffffffffffffffffffff8760801c9716600955610f22877f00000000000000000000000000000000000000000000000000000000000000009283613aa1565b7e4e8d79e4b41c5fad7561dc7c07786ee4e52292da7a3f5dc7ab90e32cc3042388604051898152a1613995565b60075560025416176002556040805194859485528401526040830190612880565b80610f9584610f8160019486612a28565b511689610f8e848b612a28565b5191613aa1565b01610ea6565b606487604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152fd5b9091508381813d8311611029575b6110118183612944565b810103126103195761102290612b5a565b9084610de0565b503d611007565b60046040517fcd81a636000000000000000000000000000000000000000000000000000000008152fd5b611062613373565b610d64565b346103195760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610319577f01000000000000000000000000000000000000000000000000000000000000006110bf61283a565b611128600254916110d660028460f81c1415612a3c565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80941617600255602435903361304e565b6002541617600255602060405160018152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195760405160009060045460018160011c9060018316928315611289575b602093848410811461125a5783865290811561121c57506001146111c1575b6102c2846111b581880382612944565b604051918291826127d4565b600460009081529294507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061120957505050816102c2936111b592820101936111a5565b80548585018701529285019281016111ed565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858501525050151560051b82010191506111b5816102c26111a5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611186565b346103195760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610319576112ca61283a565b60243515908115602435036103195760443580159283158203610319577f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025461133b60028260f81c1415612a3c565b1617600255427f000000000000000000000000000000000000000000000000000000000000000011159384611da1575b81611d99575b50611d6f5761137f826142a9565b15611d565761138c612c39565b9115611aaf5760005b8251811015611475578073ffffffffffffffffffffffffffffffffffffffff6113c060019386612a28565b5116600052600b60209080825260406000205473ffffffffffffffffffffffffffffffffffffffff6113f28589612a28565b511660005260058352604060002073ffffffffffffffffffffffffffffffffffffffff8716600052835260406000205460801c8082106000146114665750506000915b73ffffffffffffffffffffffffffffffffffffffff6114548589612a28565b51166000525260406000205501611395565b61146f91612b7b565b91611435565b5073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691604051917f61d027b3000000000000000000000000000000000000000000000000000000008352602083600481875afa92831561030d57600093611a70575b50602060049394604051948580927ff5de2d1f0000000000000000000000000000000000000000000000000000000082525afa92831561030d57600093611a4f575b50600061153c835161299d565b9460005b84518110156117475773ffffffffffffffffffffffffffffffffffffffff6115688287612a28565b5116600052600580602052604060002073ffffffffffffffffffffffffffffffffffffffff861660005260205260406000205460801c9073ffffffffffffffffffffffffffffffffffffffff6115be8489612a28565b5116600052602052604060002073ffffffffffffffffffffffffffffffffffffffff861660005260205260406000206fffffffffffffffffffffffffffffffff8154169055670de0b6b3a76400006116286fffffffffffffffffffffffffffffffff891683614639565b04906116348282612b7b565b61163e848b612a28565b5284158061173f575b6116fd575b50908161167c6001938573ffffffffffffffffffffffffffffffffffffffff611675868c612a28565b5116613aa1565b6116ab73ffffffffffffffffffffffffffffffffffffffff61169e848a612a28565b511687610f8e858d612a28565b7f880a48d40a6133941abdcfabd5c5f9a791b1e6c8afd23138c5a36e3d95039222602073ffffffffffffffffffffffffffffffffffffffff6116ed858b612a28565b511692604051908152a201611540565b61171f73ffffffffffffffffffffffffffffffffffffffff610e1c858a612a28565b1061172b575b8861164c565b9250600190611738613908565b9092611725565b506000611647565b509193505050505b817f78d61a0c27b13f43911095f9f356f14daa3cd8b125eea1aa22421245e90e813d604051602081528061179e73ffffffffffffffffffffffffffffffffffffffff8616946020830190612880565b0390a25b60243515611a47576117b3816145b1565b7f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016604051917f61d027b30000000000000000000000000000000000000000000000000000000083526020918284600481845afa93841561030d57600094611a0c575b5082600491604051928380927fdd86fea10000000000000000000000000000000000000000000000000000000082525afa95861561030d5761192d967f83a945bd12c713615b59a6e48a3467c05d1a7442350600d6f7fce6af9f7190e9957e4e8d79e4b41c5fad7561dc7c07786ee4e52292da7a3f5dc7ab90e32cc304239486946000936119db575b5061193b9293611936670de0b6b3a76400006119236fffffffffffffffffffffffffffffffff9c85169c8d60005260068a52604060002098895499828b60801c9b1690551688614639565b049b8c8097612b7b565b9b8c9483613aa1565b613aa1565b604051908152a1604051848152a25b6119737f0000000000000000000000000000000000000000000000000000000000000000613995565b6007557f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025416176002556102c26040519283928352604060208401526040830190612880565b61193b93506119ff90863d8811611a05575b6119f78183612944565b8101906138e0565b926118d8565b503d6119ed565b9093508281813d8311611a40575b611a248183612944565b810103126103195782611a38600492612b5a565b94915061184f565b503d611a1a565b50600061194a565b611a6991935060203d602011611a05576119f78183612944565b918461152f565b92506020833d602011611aa7575b81611a8b60209383612944565b81010312610319576020611aa0600494612b5a565b93506114ed565b3d9150611a7e565b9073ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604051917f61d027b30000000000000000000000000000000000000000000000000000000083526020908184600481885afa93841561030d57600094611d1d575b508160049495604051958680927ff5de2d1f0000000000000000000000000000000000000000000000000000000082525afa93841561030d57600094611cfe575b506fffffffffffffffffffffffffffffffff94939480951693600093611b91815161299d565b958884169060005b8a8451821015611ced578989918789888f8d9083611bb78a85612a28565b511660005260059182815260406000208c600052815260406000205460801c9285611be28c87612a28565b511660005281526040600020908c600052526040600020908154169055670de0b6b3a7640000611c128a83614639565b0496611c1e8883612b7b565b611c288a89612a28565b521580611ce5575b611ca3575b508587969593611c66959361167560019a611c4f95612a28565b610f8e858c611c5e828d612a28565b511693612a28565b7f880a48d40a6133941abdcfabd5c5f9a791b1e6c8afd23138c5a36e3d950392228989611c93858a612a28565b511692604051908152a201611b99565b925090610e1c87611cb393612a28565b10611cc2575b87898838611c35565b869a506001939291611c6691611cd6613908565b949b5092939192919050611cb9565b506001611c30565b50505050505050505090509061174f565b611d16919450823d8411611a05576119f78183612944565b9286611b6b565b93508184813d8311611d4f575b611d348183612944565b810103126103195781611d48600495612b5a565b9450611b2a565b503d611d2a565b9050611d69611d63612c39565b5161299d565b906117a2565b60046040517f68146f1d000000000000000000000000000000000000000000000000000000008152fd5b905084611371565b611da9613373565b61136b565b346103195760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610319576020611e11611dea61283a565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000205490565b604051908152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195760206fffffffffffffffffffffffffffffffff60085416604051908152f35b346103195760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031957611e9e61283a565b611ea661285d565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526005602090815260408083209390941682529182528290205482516fffffffffffffffffffffffffffffffff8216815260809190911c91810191909152f35b346103195760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195767ffffffffffffffff60043581811161031957611f529036906004016128b4565b909160243581811161031957611f6c9036906004016128b4565b93909160443590811161031957611f879036906004016128b4565b92909160025494611f9e60028760f81c1415612a3c565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80971617600255427f000000000000000000000000000000000000000000000000000000000000000011156105b1578015610be0578087148015906120ce575b610c0a57612036612031368787612aa1565b613536565b61203e613569565b81116120905750610b9793610b896102c298946120827f0100000000000000000000000000000000000000000000000000000000000000989561208a953691612aef565b953691612aef565b916135d1565b60449061209b613569565b604051917fa2cb081900000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b508085141561201f565b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610319576020600754604051908152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031957602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610319576020604051427f000000000000000000000000000000000000000000000000000000000000000011158152f35b346103195760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195761225e61283a565b61226661285d565b6044356002549161227d60028460f81c1415612a3c565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094161760025573ffffffffffffffffffffffffffffffffffffffff841660005260016020526040600020336000526020526040600020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810361234b575b5090611128917f01000000000000000000000000000000000000000000000000000000000000009461304e565b919081831061238f577f0100000000000000000000000000000000000000000000000000000000000000946123868361112895033383612d4a565b9450909161231e565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031957602060025461243160028260f81c1415612a3c565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809216176002557f01000000000000000000000000000000000000000000000000000000000000006124a2612ebf565b916002541617600255604051908152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195760207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610319576009546fffffffffffffffffffffffffffffffff8116801561262757612563612c39565b9161256e835161299d565b612578845161299d565b9160005b85518110156125ee57600190600b73ffffffffffffffffffffffffffffffffffffffff806125aa848b612a28565b5116600052602090600a82526040600020546125c68589612a28565b526125d1848b612a28565b5116600052526040600020546125e78287612a28565b520161257c565b5092916126196102c292604051958695865260801c6020860152608060408601526080850190612880565b908382036060850152612880565b60046040517fd2509633000000000000000000000000000000000000000000000000000000008152fd5b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031957600954604080516fffffffffffffffffffffffffffffffff8316815260809290921c602083015290f35b346103195760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610319576126ee6126e461283a565b6024359033612d4a565b602060405160018152f35b346103195760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103195760009060035460018160011c90600183169283156127ca575b602093848410811461125a5783865290811561121c575060011461276f576102c2846111b581880382612944565b600360009081529294507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8284106127b757505050816102c2936111b592820101936111a5565b805485850187015292850192810161279b565b91607f1691612741565b60208082528251818301819052939260005b858110612826575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006040809697860101520116010190565b8181018301518482016040015282016127e6565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361031957565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361031957565b90815180825260208080930193019160005b8281106128a0575050505090565b835185529381019392810192600101612892565b9181601f840112156103195782359167ffffffffffffffff8311610319576020808501948460051b01011161031957565b67ffffffffffffffff81116128f957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176128f957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176128f957604052565b67ffffffffffffffff81116128f95760051b60200190565b906129a782612985565b6129b46040519182612944565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06129e28294612985565b0190602036910137565b8051156129f95760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156129f95760209160051b010190565b15612a4357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b9291612aac82612985565b91612aba6040519384612944565b829481845260208094019160051b810192831161031957905b828210612ae05750505050565b81358152908301908301612ad3565b9291612afa82612985565b91612b086040519384612944565b829481845260208094019160051b810192831161031957905b828210612b2e5750505050565b813573ffffffffffffffffffffffffffffffffffffffff81168103610319578152908301908301612b21565b519073ffffffffffffffffffffffffffffffffffffffff8216820361031957565b91908203918211612b8857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60209081818403126103195780519067ffffffffffffffff821161031957019180601f84011215610319578251612bed81612985565b93612bfb6040519586612944565b818552838086019260051b820101928311610319578301905b828210612c22575050505090565b838091612c2e84612b5a565b815201910190612c14565b6040517fc4f59f9b00000000000000000000000000000000000000000000000000000000815260008160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561030d57600091612cb0575090565b612ccd91503d806000833e612cc58183612944565b810190612bb7565b90565b60209081818403126103195780519067ffffffffffffffff821161031957019180601f84011215610319578251612d0681612985565b93612d146040519586612944565b818552838086019260051b820101928311610319578301905b828210612d3b575050505090565b81518152908301908301612d2d565b73ffffffffffffffffffffffffffffffffffffffff809116918215612e3c5716918215612db85760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b7f000000000000000000000000000000000000000000000000000000000000000080613024575b61301b576040517f3ba0b9a900000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561030d57600091612fe9575b5060085460801c80821115612fe15750905b6fffffffffffffffffffffffffffffffff91828111610319577fffffffffffffffffffffffffffffffff000000000000000000000000000000008382169343169160801b1617600855817f71475f2f645813fdbebf53a58968008bff11ee21a58f01c5a9cc263d0bc4703d600080a2565b905090612f70565b90506020813d602011613013575b8161300460209383612944565b81010312610319575138612f5e565b3d9150612ff7565b60085460801c90565b506fffffffffffffffffffffffffffffffff600854164314612ee6565b91908201809211612b8857565b9173ffffffffffffffffffffffffffffffffffffffff918284169283156132ef57811693841561326b5784841461320d57427f0000000000000000000000000000000000000000000000000000000000000000111580613200575b6130b3838361441b565b156131f2576fffffffffffffffffffffffffffffffff60095416905b813086036131e2575b50503085036131d2575b505081600052600060205260406000205481811061314e57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092856000526000845203604060002055846000526040600020613143828254613041565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b6131db9161488a565b38806130e2565b6131eb9161488a565b38816130d8565b6131fa612ebf565b906130cf565b613208613373565b6130a9565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b6fffffffffffffffffffffffffffffffff806009541661353357613395613908565b61339d612ebf565b81811161031957167fffffffffffffffffffffffffffffffff00000000000000000000000000000000600954161760095573ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001660408051917fc4f59f9b0000000000000000000000000000000000000000000000000000000083526000908184600481845afa938415613509578294613513575b5081809160048551809481937ff8b2f9910000000000000000000000000000000000000000000000000000000083525af19081156135095782916134ef575b50815b84518110156134e657806134a060019284612a28565b51886134ac8389612a28565b51168552602090600a825286862055600b6134cb8a610e1c858b612a28565b918a6134d7858b612a28565b5116875252858520550161348a565b50505050509050565b61350391503d8084833e6102fe8183612944565b38613487565b83513d84823e3d90fd5b8291945061352b82913d8084833e612cc58183612944565b949150613448565b50565b600090815b81518310156135635761355b6001916135548585612a28565b5190613041565b92019161353b565b91505090565b61359e6135957f0000000000000000000000000000000000000000000000000000000000000000613995565b60075490612b7b565b9081156135a757565b60046040517f22826619000000000000000000000000000000000000000000000000000000008152fd5b9291906135de825161299d565b6135e6612ebf565b60009573ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001692427f00000000000000000000000000000000000000000000000000000000000000001115985b87518110156138d557670de0b6b3a764000061366f83613669848c612a28565b51614639565b0461367a8288612a28565b52836136868289612a28565b51166136928288612a28565b51908015613877578b61386a575b6136a9816142a9565b6136b2816145b1565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808311610319576002908154908085168183160190808211612b88577fff0000000000000000000000000000000000000000000000000000000000000091169116179055806000526020906000825260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604095868420613756828254613041565b90558651908152a3856137698487612a28565b5116613775848a612a28565b5190883b156103195783517f12a31dcc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152600081604481838c5af1801561385f577fc0025304673122449dd60b9b0093874b0e2fd6fe57af1c7c2fbfee0ccf5ead5885948d9461383d878f968f969a8e61382e8f8260019f8580936138369861382693613850575b50612a28565b51169b612a28565b511699612a28565b5195612a28565b519082519485528401523392a401613649565b613859906128e5565b38613820565b83513d6000823e3d90fd5b613872613373565b6136a0565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b505050505093505050565b9081602091031261031957516fffffffffffffffffffffffffffffffff811681036103195790565b6040517fef5cfb8c0000000000000000000000000000000000000000000000000000000081523060048201526000816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561030d576139815750565b613533903d806000833e6102fe8183612944565b60009073ffffffffffffffffffffffffffffffffffffffff16806139b95750504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa918215613a37578092613a03575b505090565b9091506020823d602011613a2f575b81613a1f60209383612944565b81010312613a2c57505190565b80fd5b3d9150613a12565b604051903d90823e3d90fd5b3d15613a9c573d9067ffffffffffffffff82116128f95760405191613a9060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184612944565b82523d6000602084013e565b606090565b8215613ce15773ffffffffffffffffffffffffffffffffffffffff1680613b3a5750600080809381935af1613ad4613a43565b5015613adc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b613c1a9060405190613bcb82613b9f602097888301977fa9059cbb000000000000000000000000000000000000000000000000000000008952602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612944565b60405191613bd883612928565b8583527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656486840152600080958192519082855af1613c14613a43565b91614b0a565b805191821591848315613cb9575b505050905015613c355750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b919381809450010312613cdd57820151908115158203613a2c575080388084613c28565b5080fd5b505050565b9190916fffffffffffffffffffffffffffffffff80809416911601918211612b8857565b9190613d1581613536565b9273ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691823b15610319576040958651937fb64761f90000000000000000000000000000000000000000000000000000000085526000948581600493818381613dbb8930600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015614203576141f0575b50427f00000000000000000000000000000000000000000000000000000000000000001191821592613fdb575b50613e00612ebf565b85613e0b855161299d565b9680927f0000000000000000000000000000000000000000000000000000000000000000925b8751851015613f7057613e44858c612a28565b518390670de0b6b3a7640000808202908282041482151715613f42578f918e8d8f928b978f91978f8a99613e798d8c9a61464c565b91613f11575b50613e8a8888612a28565b528c84613e978986612a28565b5116613ea38989612a28565b5190613eae92613aa1565b613eb791613041565b9b613ec191612a28565b511694613ecd91612a28565b5191613ed891612a28565b518251918252602082015233917f5d624aa9c148153ab3446c1b154f660ee7701e549fe9b62dab7171b1c80e6fa291a360010193613e31565b81925090613f36613f3b926fffffffffffffffffffffffffffffffff60095416614a7e565b612b7b565b9038613e7f565b6011897f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b99505050505050505050925080613f845750565b6fffffffffffffffffffffffffffffffff808211610319577fffffffffffffffffffffffffffffffff00000000000000000000000000000000613fcf8260095494168460801c613ce6565b60801b16911617600955565b301561416d5782614160575b613ff0306142a9565b613ff9306145b1565b30865285602052888620548181106140dd5781903088528760205203898720557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082116103195760025490808316818316038181116140b057889392917fff00000000000000000000000000000000000000000000000000000000000000911691161760025589519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203092a338613df7565b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60848a517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b614168613373565b613fe7565b608489517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b6141fc909591956128e5565b9338613dca565b89513d88823e3d90fd5b427f000000000000000000000000000000000000000000000000000000000000000011156142805761425e7f0000000000000000000000000000000000000000000000000000000000000000613995565b30600052600060205260406000205480821060001461427b575090565b905090565b612ccd7f0000000000000000000000000000000000000000000000000000000000000000613995565b6000916142b4612c39565b92427f00000000000000000000000000000000000000000000000000000000000000001161438257506142e7835161299d565b9060005b8451811015614337578073ffffffffffffffffffffffffffffffffffffffff61431660019388612a28565b5116600052600a6020526040600020546143308286612a28565b52016142eb565b50925b805115613ce15773ffffffffffffffffffffffffffffffffffffffff83168015159081614377575b5061436c57505050565b614375926146bb565b565b905030141538614362565b6040939193517ff8b2f99100000000000000000000000000000000000000000000000000000000815281816004818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1918215613a37578092614400575b50509061433a565b61441492503d8091833e6102fe8183612944565b38806143f8565b906000614426612c39565b90427f0000000000000000000000000000000000000000000000000000000000000000116145185750614459815161299d565b9160005b82518110156144a9578073ffffffffffffffffffffffffffffffffffffffff61448860019386612a28565b5116600052600a6020526040600020546144a28287612a28565b520161445d565b50925b8151156145125773ffffffffffffffffffffffffffffffffffffffff9083838383168015159081614507575b506144f6575b50505083168015159081614377575061436c57505050565b6144ff926146bb565b3883836144de565b9050301415386144d8565b50505050565b6040939293517ff8b2f99100000000000000000000000000000000000000000000000000000000815281816004818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1918215613a37578092614596575b5050916144ac565b6145aa92503d8091833e6102fe8183612944565b388061458e565b427f00000000000000000000000000000000000000000000000000000000000000001161462c576fffffffffffffffffffffffffffffffff600954165b73ffffffffffffffffffffffffffffffffffffffff82168015159081614621575b50614618575050565b6143759161488a565b90503014153861460f565b614634612ebf565b6145ee565b81810292918115918404141715612b8857565b8115614656570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b1561468c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b9092919273ffffffffffffffffffffffffffffffffffffffff6146f28184169384151580614880575b6146ed90614685565b614aa1565b9160005b81518110156134e6578261470a8284612a28565b5116906147178189612a28565b51826000526005906020908282526040806000208a60005283526fffffffffffffffffffffffffffffffff91828260002054168015614878575b8181148015614870575b61486157670de0b6b3a764000061477e61477861479d9385612b7b565b8d614639565b0488600052868652836000208d6000528652836000205460801c613041565b9183821161031957838311610319578051948186019686881067ffffffffffffffff8911176128f95760019986809561485b9a86521688528483890196168652600052815281600020908d600052526000209351167fffffffffffffffffffffffffffffffff0000000000000000000000000000000084541617835551166fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b016146f6565b5050505050506001915061485b565b50811561475b565b506001614751565b50308514156146e4565b73ffffffffffffffffffffffffffffffffffffffff811680151580614a74575b6148b390614685565b600090808252600660205260408220928354906fffffffffffffffffffffffffffffffff9485831692878414614a6a578315614a2e5750508561492d61491d6149339373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000205490565b6149278584612b7b565b90614639565b92614639565b90670de0b6b3a764000090818102918183041490151715614a0157906149589161464c565b8381116149fd576149bf90828452600660205261497f85604086209216825460801c613ce6565b6fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b828411613cdd5790604091815260066020522091167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b8280fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b959492509580935084915011613a2c5750907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091169116179055565b5050505050505050565b50308114156148aa565b670de0b6b3a764000091828102928184041490151715612b8857612ccd9161464c565b73ffffffffffffffffffffffffffffffffffffffff1660009080825260066020526fffffffffffffffffffffffffffffffff60408320541680156139fe5782614af7604092612ccd956020528383205490614a7e565b9281526006602052205460801c90613041565b91929015614b855750815115614b1e575090565b3b15614b275790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b825190915015614b985750805190602001fd5b614bce906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352600483016127d4565b0390fdfea2646970667358221220430d9d58981384c975b27e0372f23f6fca8d41e0f2261c3c3a43a0f94b8c5a0f64736f6c63430008180033000000000000000000000000b1b9150f2085f6a553b547099977181ca802752a0000000000000000000000007aa68e84bcd8d1b4c9e10b1e565db993f68a3e0900000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000676c9c80000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000165954204b656c70204761696e2032364445433230323400000000000000000000000000000000000000000000000000000000000000000000000000000000001259542d61674554482d3236444543323032340000000000000000000000000000