0x608060405234801561001057600080fd5b5061427d806100206000396000f3fe6080604052600436106103b85760003560e01c80637bef6937116101f2578063c9b171491161010d578063e9f2838e116100a0578063f2fde38b1161006f578063f2fde38b14610b3c578063f520e7e514610b5c578063f7d4491a14610b72578063f8077fae14610b9257600080fd5b8063e9f2838e14610ad0578063f181c86714610ae6578063f1e7250e14610b06578063f2d348c214610b1c57600080fd5b8063daf7b3b4116100dc578063daf7b3b414610a5a578063dc07065714610a7a578063e878871014610a9a578063e941fa7814610aba57600080fd5b8063c9b17149146109fa578063d123738514610a10578063d58778d614610a25578063d7f469da14610a4557600080fd5b806397f13b9d11610185578063b8a758d611610154578063b8a758d61461098f578063c07e587a146109a4578063c0dab516146109c4578063c71859b8146109da57600080fd5b806397f13b9d1461090f578063994818db1461092f5780639d37b8db1461094f578063a893c9be1461096f57600080fd5b80638f1ea86a116101c15780638f1ea86a146108955780638f32d59b146108aa5780638fab0db3146108cf57806393a348a6146108ef57600080fd5b80637bef693714610822578063857355c9146108425780638c396220146108575780638da5cb5b1461087757600080fd5b806338d07436116102e25780634b09b72a1161027557806368a9f31c1161024457806368a9f31c146107525780636f93bfb714610770578063750c281c146107905780637a9262a2146107a357600080fd5b80634b09b72a146106dc5780634fe36e56146106f25780635da5bc55146107125780635fc987c11461073257600080fd5b806343a08b78116102b157806343a08b78146106465780634460d3cf146106665780634613d9b8146106865780634a3b68cc146106a657600080fd5b806338d07436146105d05780633f90916a146105f05780633fe3376f146106065780634100b5aa1461062657600080fd5b80631459457a1161035a57806320eba2391161032957806320eba239146105505780632dbc32281461057057806330e45f051461059057806338af3eed146105b057600080fd5b80631459457a146104b4578063150b7a02146104d65780631c74a3011461051b578063202a36cd1461053057600080fd5b80630ab51bac116103965780630ab51bac146104115780630c0c0c63146104265780630ce71e32146104745780630f4ef8a61461049457600080fd5b80630288a39c146103bd5780630526679c146103e657806307621eca146103fc575b600080fd5b3480156103c957600080fd5b506103d360515481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506103d3603b5481565b34801561040857600080fd5b506103d3610ba8565b34801561041d57600080fd5b506103d3610bb7565b34801561043257600080fd5b5061045c610441366004613806565b6055602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b34801561048057600080fd5b5060565461045c906001600160a01b031681565b3480156104a057600080fd5b5060485461045c906001600160a01b031681565b3480156104c057600080fd5b506104d46104cf366004613834565b610dbb565b005b3480156104e257600080fd5b506105026104f13660046138a5565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016103dd565b34801561052757600080fd5b506104d4610f27565b34801561053c57600080fd5b506104d461054b366004613806565b610f9d565b34801561055c57600080fd5b506104d461056b366004613806565b6110b3565b34801561057c57600080fd5b506104d461058b366004613944565b6110dc565b34801561059c57600080fd5b5060455461045c906001600160a01b031681565b3480156105bc57600080fd5b50603c5461045c906001600160a01b031681565b3480156105dc57600080fd5b506104d46105eb366004613994565b6111f7565b3480156105fc57600080fd5b506103d360525481565b34801561061257600080fd5b5060465461045c906001600160a01b031681565b34801561063257600080fd5b506104d4610641366004613806565b6115a6565b34801561065257600080fd5b506104d46106613660046139c4565b6115cf565b34801561067257600080fd5b506104d46106813660046139c4565b61161b565b34801561069257600080fd5b506104d46106a1366004613abe565b611756565b3480156106b257600080fd5b5061045c6106c13660046139c4565b6049602052600090815260409020546001600160a01b031681565b3480156106e857600080fd5b506103d360395481565b3480156106fe57600080fd5b506104d461070d366004613b93565b6118cd565b34801561071e57600080fd5b5060445461045c906001600160a01b031681565b34801561073e57600080fd5b5060475461045c906001600160a01b031681565b34801561075e57600080fd5b506002546001600160a01b031661045c565b34801561077c57600080fd5b506104d461078b366004613bd0565b6118fd565b6104d461079e366004613806565b6119fc565b3480156107af57600080fd5b506107f46107be3660046139c4565b60536020526000908152604090205465ffffffffffff8116906001600160681b03600160301b8204811691600160981b90041683565b6040805165ffffffffffff90941684526001600160681b0392831660208501529116908201526060016103dd565b34801561082e57600080fd5b506104d461083d366004613806565b611b16565b34801561084e57600080fd5b506104d4611bf3565b34801561086357600080fd5b5061045c610872366004613806565b611c69565b34801561088357600080fd5b506000546001600160a01b031661045c565b3480156108a157600080fd5b506104d4611c93565b3480156108b657600080fd5b506108bf611e3d565b60405190151581526020016103dd565b3480156108db57600080fd5b506104d46108ea366004613bf2565b611e64565b3480156108fb57600080fd5b506104d461090a366004613806565b611fca565b34801561091b57600080fd5b506104d461092a366004613c33565b61205b565b34801561093b57600080fd5b506104d461094a366004613806565b61208e565b34801561095b57600080fd5b506104d461096a366004613806565b612120565b34801561097b57600080fd5b506104d461098a366004613806565b6121b0565b34801561099b57600080fd5b506104d461223a565b3480156109b057600080fd5b506103d36109bf366004613806565b6122b5565b3480156109d057600080fd5b506103d3603d5481565b3480156109e657600080fd5b506104d46109f5366004613806565b6123bb565b348015610a0657600080fd5b506103d360405481565b348015610a1c57600080fd5b506103d361244a565b348015610a3157600080fd5b506103d3610a40366004613806565b6124c9565b348015610a5157600080fd5b506104d46124ea565b348015610a6657600080fd5b506104d4610a75366004613cd8565b612709565b348015610a8657600080fd5b506104d4610a953660046139c4565b6127d8565b348015610aa657600080fd5b506104d4610ab5366004613bf2565b61281e565b348015610ac657600080fd5b506103d360505481565b348015610adc57600080fd5b506103d3603a5481565b348015610af257600080fd5b506103d3610b01366004613806565b6128d0565b348015610b1257600080fd5b506103d3603e5481565b348015610b2857600080fd5b506104d4610b373660046139c4565b612991565b348015610b4857600080fd5b506104d4610b573660046139c4565b6129e8565b348015610b6857600080fd5b506103d360375481565b348015610b7e57600080fd5b506104d4610b8d366004613d85565b612a34565b348015610b9e57600080fd5b506103d3604a5481565b6000610bb2612a82565b905090565b6000806000605660009054906101000a90046001600160a01b03166001600160a01b031663442675706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c339190613dcc565b905060005b605454811015610d3d576000826001600160a01b031663127ffa0260548481548110610c6657610c66613de9565b90600052602060002001546055600060548781548110610c8857610c88613de9565b6000918252602080832090910154835282019290925260409081019091205490516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401600060405180830381865afa158015610cf0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d189190810190613e23565b509150610d2790508185613ee0565b9350508080610d3590613ef9565b915050610c38565b506045546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daa9190613f12565b610db49083613ee0565b9250505090565b6046546001600160a01b031615610e285760405162461bcd60e51b815260206004820152602660248201527f436f6e74726163742068617320616c7265616479206265656e20696e697469616044820152653634bd32b21760d11b60648201526084015b60405180910390fd5b610e30612b06565b604480546001600160a01b038781166001600160a01b0319928316178355604580548783169084161790556046805488831690841681179091556047805487841690851617905560488054928616928416831790556000603d556019603e556801a055690d9db80000603955620d2f00603b55603c80549093163317909255620bdd8060375560405163095ea7b360e01b815260048101919091526000196024820152909163095ea7b391016020604051808303816000875af1158015610efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1f9190613f2b565b505050505050565b6001546001600160a01b03163314610f765760405162461bcd60e51b815260206004820152601260248201527137b7363c903832b73234b7339037bbb732b960711b6044820152606401610e1f565b600154610f8b906001600160a01b0316612bd0565b600180546001600160a01b0319169055565b6000610fa7612c70565b604051630325ea3760e01b8152600481018490529091506000906001600160a01b03831690630325ea37906024016040805180830381865afa158015610ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110159190613f48565b604051630a9a1f1b60e31b815260048101869052909250600091506001600160a01b038416906354d0f8d890602401602060405180830381865afa158015611061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110859190613f12565b905081600e1480156110a3575062093a806110a08242613f6c565b11155b156110ad5742603a555b50505050565b6110bb611e3d565b6110d75760405162461bcd60e51b8152600401610e1f90613f7f565b605155565b6110e4611e3d565b6111005760405162461bcd60e51b8152600401610e1f90613f7f565b6045546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061113490869030908790600401613fa3565b6020604051808303816000875af1158015611153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111779190613f2b565b5061118182612ce2565b6044805460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018690529091169163a9059cbb91016020604051808303816000875af11580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ad9190613f2b565b603b54603a546112079042613f6c565b116112245760405162461bcd60e51b8152600401610e1f90613fc7565b600061122f836128d0565b6045546040516370a0823160e01b81523060048201529192506001600160a01b0316906370a0823190602401602060405180830381865afa158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c9190613f12565b816052546112aa9190613ee0565b11156113095760405162461bcd60e51b815260206004820152602860248201527f4e6f7420656e6f756768204e584d20617661696c61626c6520666f722077697460448201526734323930bbb0b61760c11b6064820152608401610e1f565b811561140c5760006103e860505483611322919061400a565b61132c9190614021565b9050600061133a8284613f6c565b604654604051632770a7eb60e21b8152336004820152602481018890529192506001600160a01b031690639dc29fac90604401600060405180830381600087803b15801561138757600080fd5b505af115801561139b573d6000803e3d6000fd5b505050506113a881612ce2565b6044546113bf906001600160a01b03163383612d5a565b6040805184815260208101879052429181019190915233907f650fdf669e93aa6c8ff3defe2da9c12b64f1548e5e1e54e803f4c1beb6466c8e906060015b60405180910390a25050505050565b8060525461141a9190613ee0565b605255604654611435906001600160a01b0316333086612dbd565b33600090815260536020908152604091829020825160608082018552915465ffffffffffff80821683526001600160681b03600160301b83048116848701908152600160981b90930416838701528551938401909552429094168252925190918201906114a3908590614043565b6001600160681b031681526020018583604001516114c19190614043565b6001600160681b0390811690915233600081815260536020908152604091829020855181549287015196909301518516600160981b0272ffffffffffffffffffffffffffffffffffffff96909516600160301b0272ffffffffffffffffffffffffffffffffffffff1990921665ffffffffffff909316929092171793909316919091179091556051547f1f0d204a59639d21245dbaa239dfc9a6227aa86cb614bdda19843c52d155fcfa9086908590429061157c9082613ee0565b60408051948552602085019390935291830152606082015260800160405180910390a2505b505050565b6115ae611e3d565b6115ca5760405162461bcd60e51b8152600401610e1f90613f7f565b603955565b6002546001600160a01b031633146115f95760405162461bcd60e51b8152600401610e1f90613f7f565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b611623611e3d565b61163f5760405162461bcd60e51b8152600401610e1f90613f7f565b6045546001600160a01b0382811691161480159061166b57506044546001600160a01b03828116911614155b801561168557506046546001600160a01b03828116911614155b6116d15760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f7420726573637565204e584d2d626173656420746f6b656e7300006044820152606401610e1f565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173c9190613f12565b90506117526001600160a01b0383163383612d5a565b5050565b61175e611e3d565b61177a5760405162461bcd60e51b8152600401610e1f90613f7f565b6056546001600160a01b0316156117c95760405162461bcd60e51b8152602060048201526013602482015272696e697469616c697a656420616c726561647960681b6044820152606401610e1f565b805182511461180c5760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610e1f565b815161181f9060549060208501906137a6565b5060005b82518110156118a95781818151811061183e5761183e613de9565b60200260200101516055600085848151811061185c5761185c613de9565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080806118a190613ef9565b915050611823565b50605680546001600160a01b0319166001600160a01b0385161790556115a1612dde565b6118d5611e3d565b6118f15760405162461bcd60e51b8152600401610e1f90613f7f565b6110ad84848484612f1e565b611905611e3d565b6119215760405162461bcd60e51b8152600401610e1f90613f7f565b6047546040516227050b60e31b81526123ab60f11b60048201526000916001600160a01b031690630138285890602401602060405180830381865afa15801561196e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119929190613dcc565b604051636f93bfb760e01b815260048101859052602481018490529091506001600160a01b03821690636f93bfb7906044015b600060405180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b50505050505050565b731337def157efdef167a81b3bab95385ce5a144773314611a5f5760405162461bcd60e51b815260206004820152601f60248201527f53656e646572206d7573742062652045786368616e67654d616e616765722e006044820152606401610e1f565b6047546040516227050b60e31b815261503160f01b60048201526000916001600160a01b031690630138285890602401602060405180830381865afa158015611aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad09190613dcc565b6040516304b1dde360e51b8152600481018490529091506001600160a01b0382169063963bbc609047906024016000604051808303818588803b1580156119df57600080fd5b611b1e611e3d565b611b3a5760405162461bcd60e51b8152600401610e1f90613f7f565b600060548281548110611b4f57611b4f613de9565b9060005260206000200154905060546001605480549050611b709190613f6c565b81548110611b8057611b80613de9565b906000526020600020015460548381548110611b9e57611b9e613de9565b6000918252602090912001556054805480611bbb57611bbb61406a565b60008281526020808220830160001990810183905590920190925591815260559091526040902080546001600160a01b031916905550565b6003546001600160a01b03163314611c425760405162461bcd60e51b815260206004820152601260248201527137b7363c903832b73234b7339037bbb732b960711b6044820152606401610e1f565b600354611c57906001600160a01b0316613100565b600380546001600160a01b0319169055565b60418181548110611c7957600080fd5b6000918252602090912001546001600160a01b0316905081565b333214611cdb5760405162461bcd60e51b815260206004820152601660248201527529b2b73232b91036bab9ba1031329030b71022a7a09760511b6044820152606401610e1f565b603754604a54611ceb9042613f6c565b11611d385760405162461bcd60e51b815260206004820152601b60248201527f72657761726420696e74657276616c206e6f74207265616368656400000000006044820152606401610e1f565b6000611d42610bb7565b90506000805b605454811015611dda57611dbc6055600060548481548110611d6c57611d6c613de9565b9060005260206000200154815260200190815260200160002060009054906101000a90046001600160a01b031660548381548110611dac57611dac613de9565b90600052602060002001546131a1565b611dc69083613ee0565b915080611dd281613ef9565b915050611d48565b506000611de682613229565b604081905590508015611e3457604080518381524260208201529081018490527f1574d0bf0b356a89be9bcfedeed722e6c9b5ba2f0d3aa4be6ef11888b1d1f7f79060600160405180910390a15b505042604a5550565b600080546001600160a01b0316331480610bb25750506002546001600160a01b0316331490565b6046546001600160a01b03163314611ec95760405162461bcd60e51b815260206004820152602260248201527f53656e646572206d7573742062652074686520746f6b656e20636f6e747261636044820152613a1760f11b6064820152608401610e1f565b6001600160a01b038381166000908152604960205260409020541615611f63576048546001600160a01b0384811660009081526049602052604090819020549051636ce5768960e11b81529282169263d9caed1292611f3092169087908690600401613fa3565b600060405180830381600087803b158015611f4a57600080fd5b505af1158015611f5e573d6000803e3d6000fd5b505050505b6001600160a01b0382811660009081526049602052604090205416156115a1576048546001600160a01b038381166000908152604960205260409081902054905163bf6eac2f60e01b81529282169263bf6eac2f926119c592169086908690600401613fa3565b611fd2611e3d565b611fee5760405162461bcd60e51b8152600401610e1f90613f7f565b62278d008111156120565760405162461bcd60e51b815260206004820152602c60248201527f526577617264206475726174696f6e2063616e6e6f74206265206d6f7265207460448201526b3430b7101998103230bcb99760a11b6064820152608401610e1f565b603755565b612063611e3d565b61207f5760405162461bcd60e51b8152600401610e1f90613f7f565b6110ad838360016000856133b8565b612096611e3d565b6120b25760405162461bcd60e51b8152600401610e1f90613f7f565b6101f481111561211b5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f742067697665207265666572726572206d6f7265207468616e203560448201526d18129037b3103932bbb0b932399760911b6064820152608401610e1f565b603e55565b612128611e3d565b6121445760405162461bcd60e51b8152600401610e1f90613f7f565b62278d008111156121ab5760405162461bcd60e51b815260206004820152602b60248201527f5061757365206475726174696f6e2063616e6e6f74206265206d6f726520746860448201526a30b7101998103230bcb99760a91b6064820152608401610e1f565b603b55565b6121b8611e3d565b6121d45760405162461bcd60e51b8152600401610e1f90613f7f565b6103e88111156122355760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742074616b65206d6f7265207468616e2031303025206f6620776960448201526574686472617760d01b6064820152608401610e1f565b605055565b6044546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a79190613f12565b90506122b28161343d565b50565b6000806122c0612a82565b90506000604054826122d0610bb7565b6122da9190613ee0565b6122e49190613f6c565b90506000604660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561233b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235f9190613f12565b905081600003612371578493506123b3565b60008261238683670de0b6b3a764000061400a565b6123909190614021565b9050670de0b6b3a76400006123a5828861400a565b6123af9190614021565b9450505b505050919050565b6123c3611e3d565b6123df5760405162461bcd60e51b8152600401610e1f90613f7f565b6101f48111156124455760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420676976652061646d696e206d6f7265207468616e203530252060448201526a37b3103932bbb0b932399760a91b6064820152608401610e1f565b603d55565b6045546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190613f12565b6124bf610bb7565b610bb29190613f6c565b605481815481106124d957600080fd5b600091825260209091200154905081565b336000818152605360209081526040918290208251606081018452905465ffffffffffff81168083526001600160681b03600160301b83048116948401859052600160981b909204909116938201849052603b54603a5492949261254e9042613f6c565b1161256b5760405162461bcd60e51b8152600401610e1f90613fc7565b426051548261257a9190613ee0565b11156125c05760405162461bcd60e51b81526020600482015260156024820152744e6f7420726561647920746f20776974686472617760581b6044820152606401610e1f565b600083116126105760405162461bcd60e51b815260206004820152601d60248201527f4e6f2070656e64696e6720616d6f756e7420746f2077697468647261770000006044820152606401610e1f565b604654604051632770a7eb60e21b8152306004820152602481018490526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b15801561265c57600080fd5b505af1158015612670573d6000803e3d6000fd5b5050505061267d83612ce2565b604454612694906001600160a01b03168685612d5a565b6001600160a01b0385166000908152605360205260408120556052546126bb908490613f6c565b605255604080518481526020810184905242918101919091526001600160a01b038616907f650fdf669e93aa6c8ff3defe2da9c12b64f1548e5e1e54e803f4c1beb6466c8e906060016113fd565b3332146127515760405162461bcd60e51b815260206004820152601660248201527529b2b73232b91036bab9ba1031329030b71022a7a09760511b6044820152606401610e1f565b60405163a82e84e960e01b81526001600160a01b0388169063a82e84e990612787908990899089908990899089906004016140c9565b6000604051808303816000875af11580156127a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ce9190810190614112565b5050505050505050565b6127e0611e3d565b6127fc5760405162461bcd60e51b8152600401610e1f90613f7f565b603c80546001600160a01b0319166001600160a01b0392909216919091179055565b612826611e3d565b6128425760405162461bcd60e51b8152600401610e1f90613f7f565b6056546001600160a01b03908116908316036128a05760405162461bcd60e51b815260206004820152601a60248201527f63616e6e6f74207472616e73666572207374616b696e674e46540000000000006044820152606401610e1f565b6040516323b872dd60e01b81526001600160a01b038316906323b872dd906119c590309087908690600401613fa3565b6000806128db612a82565b90506000604054826128eb610bb7565b6128f59190613ee0565b6128ff9190613f6c565b90506000604660009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a9190613f12565b905060008161238684670de0b6b3a764000061400a565b612999611e3d565b6129b55760405162461bcd60e51b8152600401610e1f90613f7f565b6040516001600160a01b038216906108fc9060009081818181818888f19350505050158015611752573d6000803e3d6000fd5b6000546001600160a01b03163314612a125760405162461bcd60e51b8152600401610e1f90613f7f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b612a3c611e3d565b612a585760405162461bcd60e51b8152600401610e1f90613f7f565b6000828152605560205260408120546115a1916001600160a01b03909116908490600190856133b8565b603754604a54600091908290612a989042613f6c565b905080600003612aab5760009250505090565b818110612abc576040549250505090565b600081612ad184670de0b6b3a764000061400a565b612adb9190614021565b905080604054670de0b6b3a7640000612af4919061400a565b612afe9190614021565b935050505090565b6000546001600160a01b031615612b555760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610e1f565b60008054336001600160a01b0319918216811783556002805490921681179091556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360405133906000907f056a46fd3a2b20fb8bde8639e8a4b1bd407af5f7c1169369575e29e97d41a6ca908290a3565b6001600160a01b038116612c155760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610e1f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6047546040516227050b60e31b81526110d160f21b60048201526000916001600160a01b0316906301382858906024015b602060405180830381865afa158015612cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb29190613dcc565b604454612cf8906001600160a01b03168261346e565b604454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015b600060405180830381600087803b158015612d3f57600080fd5b505af1158015612d53573d6000803e3d6000fd5b5050505050565b6040516001600160a01b0383166024820152604481018290526115a190849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526134e5565b6110ad846323b872dd60e01b858585604051602401612d8693929190613fa3565b6047546040516227050b60e31b815261505360f01b60048201526000916001600160a01b031690630138285890602401602060405180830381865afa158015612e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4f9190613dcc565b604051630ea474c760e01b81523060048201529091506000906001600160a01b03831690630ea474c790602401602060405180830381865afa158015612e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebd9190613f12565b9050612ec881613229565b50604051632e1b8c8760e21b81523060048201526001600160a01b0383169063b86e321c90602401600060405180830381600087803b158015612f0a57600080fd5b505af1158015610f1f573d6000803e3d6000fd5b6045546040516370a0823160e01b815230600482015284916000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8f9190613f12565b90508086605254603954612fa39190613ee0565b612fad9190613ee0565b1115612fec5760405162461bcd60e51b815260206004820152600e60248201526d4e6f7420656e6f756768204e584d60901b6044820152606401610e1f565b612ffd612ff76135b7565b8761346e565b604051635a90b61b60e11b81526004810187905260248101859052604481018490523060648201526000906001600160a01b0384169063b5216c36906084016020604051808303816000875af115801561305b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307f9190613f12565b6000818152605560205260409020549091506001600160a01b03166119f35760548054600181019091557ff0d642dbc7517672e217238a2f008f4f8cdad0586d8ce5113e9e09dcc686061901819055600081815260556020526040902080546001600160a01b0388166001600160a01b031990911617905550505050505050565b6001600160a01b0381166131455760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610e1f565b6002546040516001600160a01b038084169216907f056a46fd3a2b20fb8bde8639e8a4b1bd407af5f7c1169369575e29e97d41a6ca90600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000826001600160a01b03811663160cee4b848460016131bf6135ec565b6040518563ffffffff1660e01b81526004016131de9493929190614198565b60408051808303816000875af11580156131fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132209190613f48565b95945050505050565b60008061324a6103e8603d5485613240919061400a565b6109bf9190614021565b905060006132626103e8603e5486613240919061400a565b905081156132d357604654603c546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b1580156132ba57600080fd5b505af11580156132ce573d6000803e3d6000fd5b505050505b801561339c576046546040516340c10f1960e01b8152306004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561332557600080fd5b505af1158015613339573d6000803e3d6000fd5b5050604854604051633c6b16ab60e01b8152600481018590526001600160a01b039091169250633c6b16ab9150602401600060405180830381600087803b15801561338357600080fd5b505af1158015613397573d6000803e3d6000fd5b505050505b6133a68183613ee0565b6133b09085613f6c565b949350505050565b60405163160cee4b60e01b815260009086906001600160a01b0382169063160cee4b906133ef908990899089908990600401614198565b60408051808303816000875af115801561340d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134319190613f48565b50979650505050505050565b604454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e90602401612d25565b60455460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af11580156134c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a19190613f2b565b600061353a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136839092919063ffffffff16565b8051909150156115a157808060200190518101906135589190613f2b565b6115a15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e1f565b6047546040516227050b60e31b815261544360f01b60048201526000916001600160a01b031690630138285890602401612ca1565b60408051600380825260808201909252606091906277f8809060009083602082018680368337019050509050600060016136268442614021565b6136309190613f6c565b905060005b8460ff168110156136795761364a8183613ee0565b83828151811061365c5761365c613de9565b60209081029190910101528061367181613ef9565b915050613635565b5090949350505050565b60606133b0848460008585600080866001600160a01b031685876040516136aa91906141f8565b60006040518083038185875af1925050503d80600081146136e7576040519150601f19603f3d011682016040523d82523d6000602084013e6136ec565b606091505b50915091506136fd87838387613708565b979650505050505050565b60608315613777578251600003613770576001600160a01b0385163b6137705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e1f565b50816133b0565b6133b0838381511561378c5781518083602001fd5b8060405162461bcd60e51b8152600401610e1f9190614214565b8280548282559060005260206000209081019282156137e1579160200282015b828111156137e15782518255916020019190600101906137c6565b506137ed9291506137f1565b5090565b5b808211156137ed57600081556001016137f2565b60006020828403121561381857600080fd5b5035919050565b6001600160a01b03811681146122b257600080fd5b600080600080600060a0868803121561384c57600080fd5b85356138578161381f565b945060208601356138678161381f565b935060408601356138778161381f565b925060608601356138878161381f565b915060808601356138978161381f565b809150509295509295909350565b6000806000806000608086880312156138bd57600080fd5b85356138c88161381f565b945060208601356138d88161381f565b935060408601359250606086013567ffffffffffffffff808211156138fc57600080fd5b818801915088601f83011261391057600080fd5b81358181111561391f57600080fd5b89602082850101111561393157600080fd5b9699959850939650602001949392505050565b60008060006060848603121561395957600080fd5b83356139648161381f565b925060208401359150604084013561397b8161381f565b809150509250925092565b80151581146122b257600080fd5b600080604083850312156139a757600080fd5b8235915060208301356139b981613986565b809150509250929050565b6000602082840312156139d657600080fd5b81356139e18161381f565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613a2757613a276139e8565b604052919050565b600067ffffffffffffffff821115613a4957613a496139e8565b5060051b60200190565b600082601f830112613a6457600080fd5b81356020613a79613a7483613a2f565b6139fe565b82815260059290921b84018101918181019086841115613a9857600080fd5b8286015b84811015613ab35780358352918301918301613a9c565b509695505050505050565b600080600060608486031215613ad357600080fd5b8335613ade8161381f565b925060208481013567ffffffffffffffff80821115613afc57600080fd5b613b0888838901613a53565b94506040870135915080821115613b1e57600080fd5b508501601f81018713613b3057600080fd5b8035613b3e613a7482613a2f565b81815260059190911b82018301908381019089831115613b5d57600080fd5b928401925b82841015613b84578335613b758161381f565b82529284019290840190613b62565b80955050505050509250925092565b60008060008060808587031215613ba957600080fd5b843593506020850135613bbb8161381f565b93969395505050506040820135916060013590565b60008060408385031215613be357600080fd5b50508035926020909101359150565b600080600060608486031215613c0757600080fd5b8335613c128161381f565b92506020840135613c228161381f565b929592945050506040919091013590565b600080600060608486031215613c4857600080fd5b8335613c538161381f565b925060208401359150604084013567ffffffffffffffff811115613c7657600080fd5b613c8286828701613a53565b9150509250925092565b60008083601f840112613c9e57600080fd5b50813567ffffffffffffffff811115613cb657600080fd5b6020830191508360208260051b8501011115613cd157600080fd5b9250929050565b60008060008060008060006080888a031215613cf357600080fd5b8735613cfe8161381f565b9650602088013567ffffffffffffffff80821115613d1b57600080fd5b613d278b838c01613c8c565b909850965060408a0135915080821115613d4057600080fd5b613d4c8b838c01613c8c565b909650945060608a0135915080821115613d6557600080fd5b50613d728a828b01613c8c565b989b979a50959850939692959293505050565b60008060408385031215613d9857600080fd5b82359150602083013567ffffffffffffffff811115613db657600080fd5b613dc285828601613a53565b9150509250929050565b600060208284031215613dde57600080fd5b81516139e18161381f565b634e487b7160e01b600052603260045260246000fd5b60005b83811015613e1a578181015183820152602001613e02565b50506000910152565b600080600060608486031215613e3857600080fd5b835167ffffffffffffffff80821115613e5057600080fd5b818601915086601f830112613e6457600080fd5b815181811115613e7657613e766139e8565b613e89601f8201601f19166020016139fe565b9150808252876020828501011115613ea057600080fd5b613eb1816020840160208601613dff565b5060208601516040909601519097959650949350505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115613ef357613ef3613eca565b92915050565b600060018201613f0b57613f0b613eca565b5060010190565b600060208284031215613f2457600080fd5b5051919050565b600060208284031215613f3d57600080fd5b81516139e181613986565b60008060408385031215613f5b57600080fd5b505080516020909101519092909150565b81810381811115613ef357613ef3613eca565b6020808252600a908201526937b7363c9037bbb732b960b11b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526023908201527f5769746864726177616c73206172652074656d706f726172696c79207061757360408201526232b21760e91b606082015260800190565b8082028115828204841417613ef357613ef3613eca565b60008261403e57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160681b0381811683821601908082111561406357614063613eca565b5092915050565b634e487b7160e01b600052603160045260246000fd5b8183526000602080850194508260005b858110156140be5781356140a38161381f565b6001600160a01b031687529582019590820190600101614090565b509495945050505050565b6060815260006140dd60608301888a614080565b82810360208401526140f0818789614080565b90508281036040840152614105818587614080565b9998505050505050505050565b6000602080838503121561412557600080fd5b825167ffffffffffffffff81111561413c57600080fd5b8301601f8101851361414d57600080fd5b805161415b613a7482613a2f565b81815260059190911b8201830190838101908783111561417a57600080fd5b928401925b828410156136fd5783518252928401929084019061417f565b60006080820186835260208615158185015285151560408501526080606085015281855180845260a086019150828701935060005b818110156141e9578451835293830193918301916001016141cd565b50909998505050505050505050565b6000825161420a818460208701613dff565b9190910192915050565b6020815260008251806020840152614233816040850160208701613dff565b601f01601f1916919091016040019291505056fea2646970667358221220c552ca67711888b49a817f7391c8ad5db0f58340f62d8f39d622f5f67bd984a564736f6c63430008140033